- socket的引入
TCP协议的确很复杂, 我们不能要求每个程序员都去实现建立连接的3次握手, 累积确认,分组缓存, 这些应该是属于操作系统内核的部分, 没必要重复开发, 但是对于应用程序来讲, 操作系统需要抽象出一个概念, 让上层应用去编程。这个概念就是socket。 - socket的五元组
协议(UDP,TCP),客户端IP, 客户端Port, 服务器端IP, 服务器端Port
- UDP: 传送速度快,但是容易丢失数据,可以用于视频聊天、语音聊天
- TCP:传送稳定,不会丢失数据,如文件的上传、下载。
- IP:用来唯一标识我们自己的电脑,是一个网络标识。
- 端口号Port:用来区别当前电脑的应用程序。
- TCP客户端和服务端通信
- 客户端:创建一个socket,然后向服务器发起连接,连接上以后就可以发送,接收数据。
- 服务端: 第一, 服务器是被动的, 所以它启动以后, 需要监听客户端发起的连接, 第二, 服务器要应付很多的客户端发起连接, 所以它通过服务端会可以自动给客户端分配IP, 也可以自动分配端口,将各个socket给区分开了。
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.74.58", 8888);
InputStream in = s.getInputStream();
byte[] buffer = new byte[1024];
int length = in.read(buffer);
System.out.println( new String(buffer, 0 , length) );
in.close();
s.close();
}
}
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
OutputStream out = s.getOutputStream();
out.write("你已经连接上了服务器".getBytes());
out.close();
s.close();
}
}