首页 > 代码库 > socket编程入门
socket编程入门
1TCP协议
[java] view plain copy
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.Socket;
- /*
- * 1.Tcp协议客户端
- 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
- 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
- 输入流可以读取服务端输出流写出的数据
- 输出流可以写出数据到服务端的输入流
- */
- public class Client {
- public static void main(String[] args) throws Exception{
- //创建socket连接服务器
- Socket socket = new Socket("127.0.0.1", 12345);
- //获取客户端输入流
- InputStream in = socket.getInputStream();
- //获取客户端输出流
- OutputStream out = socket.getOutputStream();
- //读取服务器发过来的数据
- byte[] arr = new byte[1024];
- int len = in.read(arr);
- //将数据转换成字符串
- System.out.println(new String(arr,0,len));
- //客户端向服务端写数据
- out.write("服务器你好,我是客户端".getBytes());
- socket.close();
- }
- }
[java] view plain copy
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- /*
- * UDP协议接收端
- * 接收Receive
- 创建DatagramSocket, 指定端口号
- 创建DatagramPacket, 指定数组, 长度
- 使用DatagramSocket接收DatagramPacket
- 关闭DatagramSocket
- 从DatagramPacket中获取数据
- */
- public class Receive {
- public static void main(String[] args) throws Exception {
- // 创建码头
- DatagramSocket socket = new DatagramSocket(6666);
- // 创建接收数据集装箱
- DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
- //接收数据放到集装箱
- socket.receive(packet);
- //接收数据
- byte[] arr = packet.getData();
- int len = packet.getLength();
- System.out.println(new String(arr,0,len));
- //关闭socket
- socket.close();
- }
- }
2UDP协议
[java] view plain copy
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /*
- * UDP协议发送端
- * 发送Send
- 创建DatagramSocket, 随机端口号
- 创建DatagramPacket, 指定数据, 长度, 地址, 端口
- 使用DatagramSocket发送DatagramPacket
- 关闭DatagramSocket
- */
- public class Send {
- public static void main(String[] args) throws Exception {
- String message ="what your name?";
- //创建码头
- DatagramSocket socket = new DatagramSocket();
- //创建集装箱
- DatagramPacket packet =
- new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
- socket.send(packet);
- socket.close();
- }
- }
[java] view plain copy
- /*
- * TCP协议服务端
- 创建ServerSocket(需要指定端口号)
- 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
- 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
- 输入流可以读取客户端输出流写出的数据
- 输出流可以写出数据到客户端的输入流
- */
- public class Server {
- public static void main(String[] args) throws Exception {
- ServerSocket server = new ServerSocket(12345);
- // 接收客户端的请求
- Socket socket = server.accept();
- // 获取服务器输入流
- InputStream in = socket.getInputStream();
- // 获取服务器输出流
- OutputStream out = socket.getOutputStream();
- // 服务器向客户端写出数据
- out.write("百度一下,你就知道".getBytes());
- // 读取客户端发过来的数据
- byte[] arr = new byte[1024];
- int len = in.read(arr);
- // 将数据转换成字符串
- System.out.println(new String(arr, 0, len));
- socket.close();
- }
- }
3总结
1 Socket套接字概述:
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
通信的两端都有Socket。相当于一个港口,用于发送和接收数据的
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO流传输。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
2服务器与客户端的概念
第一次主动方就是客户端,被动方就是服务器,这些名词,只是一种喻意辞也有可能你们实际上都是客户端
3两种协议的实际案例
网络直播就是采用的UDP协议, 信号不好 视频卡了,但是还是一直发送数据,信号恢复了,就直接是信号恢复后的数据了,信号不好那个时间段的数据已经消失了
游戏一般不采取tcp协议的,因为他没有必须保证数据的完整服务器收到了,就让你移动,服务器没受到,就不让你移动
socket编程入门
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。