说明
- TCP在建立连接与断开连接时报文头部的标志位与序号值分别是多少呢?
- 利用Java的Socket对象分别实现客户端与服务端,对进通讯过程进行数据报文捕获;
- 分别研究两种情况,一种是服务器与客户端都在本机,另一种是分别位于两台机器上;
Java示例代码
Client
// packag[......]
Client
// packag[......]
package com.yusian.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class WebServer {
public static void m[......]
package com.yusian.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) {
// 服务端进程
new Thread(() -> {
try {
// 创建一个Socket服务
ServerSocket ss = new ServerSocket(8080);
// 获取Socket的字节输入流对象,此时程序会阻塞在这个位置,直到有数据
InputStream is = ss.accept().getInputStream();
int data = 0;
// 将接收到的数据输出到控制台
while ((data = is.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 客户端进程
new Thread(() -> {
try {
// 创建一个Socket客户端,连接到指定服务器
Socket s = new Socket("localhost", 8080);
// 获取Socket的字节输出流,将数据从这里发出
OutputStream os = s.getOutputStream();
os.write("Hello Socket...".getBytes());
// 注意:要主动结束数据发送,否则对方会一直处于等待状态
s.shutdownOutput();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
[……]