java 网络编程笔记

Socket

一个Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解为IP地址加端口号。端口号总是由操作系统分配,它是一个0~65535之间的数字,其中,小于1024的端口属于特权端口,需要管理员权限,大于1024的端口可以由任意用户的应用程序打开。

使用Socket进行网络编程时,本质上就是两个进程之间的网络通信。其中一个进程必须充当服务器端,它会主动监听某个指定的端口,另一个进程必须充当客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个TCP连接,双方后续就可以随时发送和接收数据。

1
2
3
// 创建服务器Socket对象,并绑定6666端口
ServerSocket ss = new ServerSocket(6666);
System.out.println("server is running...");
1
2
3
// 客户端使用Socket对象访问服务器
Socket s = new Socket("localhost",6666);
System.out.println("client is running...");

通信

使用Socket对象进行通信,需要先获取Socket对象的输入输出流,然后就可以通过输入输出流来发送和接收数据。

1
2
3
4
5
6
7
8
9
10
11
12
// 获取输入输出流
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
// 发送数据
os.write("hello".getBytes());
// 接收数据
byte[] buffer = new byte[1024];
int len = is.read(buffer);
System.out.println(new String(buffer, 0, len));
is.close();
os.close();
s.close();