1 基本概念
- TCP:专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流。
- UDP:向应用程序提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,是一种不可靠的连接。
- Socket:通常用来实现client-server连接。两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一段称为一个Socket。java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端。建立连接时所需的寻址信息为远程计算机的IP地址和端口号。TCP端口和UDP端口是分开的,各有65536个端口。
特点 | TCP | UDP |
---|---|---|
连接性 | 面向连接 | 面向非连接 |
可靠性 | 可靠 | 不可靠 |
传输效率 | 慢 | 快 |
2 TCP
C#实现:
//服务端
IPAddress ip = new IPAddress(new byte[]{127,1,1,1});
TcpListener server = new TcpListener(ip, 8005);
server.Start();//启动监听
TcpClient client = server.AcceptTcpClient();//接受发起连接对象的同步方法,如果没有接收到连接请求,线程阻塞在这里,下方代码不会执行
//客户端
IPAddress ip = IPAddress.Parse("127.1.1.1");
TcpClient client = new TcpClient();
client.Connect(ip,8005);//与服务端端口号一致
Java实现:
模拟Server端:
import java.net.*;
import java.io.*;
public class TCPServer{
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(6666);
while(true){
Socket s = ss.accept();
System.out.println("a client connect!");
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}
}
}
模拟Client端:
public class TCPClient {
public static void main(String[] args) throws Exception{
//本机ip及Server端端口号
Socket s = new Socket("127.0.0.1",6666);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Thread.sleep(30000);
dos.writeUTF("hello server!");//unicode8省空间
dos.flush();
dos.close();
s.close();//Socket连接过后关掉
}
}
3 UDP