①准备一个大于 1460 倍数的字符串:
准备的字符串长度:14+2*1460=2934(学号加姓名缩写占14,“aa”1460占 2* 1460=2920)
通过python程序准备一个大于 1460 倍数的字符串
②进行 TCP 传输,在服务器端捕捉报文,分析分段情况:
情况1:发送一个长度为2934的字符串,分了一段。

TCP报文截图
情况2:发送一个长度为2934的字符串,分了3段,分别是1460,1460,14。

TCP报文截图
③进行 UDP传输,在服务器端捕捉报文,分析分段情况:

UDP报文截图
udp分析:
1没有三次握手
2 UDP和网络层只提供尽力而为的服务,客户端未必能接收(无法分解到进程)
分析:
服务端其实就是一个TCP服务器。
服务端的实现就是网络编程,具体过程收到客户机的请求,服务器端响应(将 HTML文本发送给游览器,游览器识别之后进行展示和响应的信息)。
项目结构:
Handler.Java:线程类,通过多线程的方式处理客户机的请求
HttpServer.Java:服务器端代码
Handler.Java代码:线程类,通过多线程的方式处理客户机的请求
package com.example.hello;
import java.io.*;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Handler extends Thread{
protected Socket socket;
public Handler(Socket socket) {
this.socket=socket;
@Override
public void run() {
try(InputStream input=this.socket.getInputStream()){
try(OutputStream output=this.socket.getOutputStream()) {
handle(input,output);
} catch (Exception e) {
} catch (Exception e) {
try {
this.socket.close();
} catch (IOException e1) {
e1.printStackTrace();
private void handle(InputStream input, OutputStream output) throws IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) ;
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(output,StandardCharsets.UTF_8));
boolean requestOk=false;
String first=reader.readLine();
if (first.startsWith("GET / HTTP/")) {
requestOk=true;
for(;;){
String header=reader.readLine();
if (header.isEmpty()) {
break;
System.out.println(header);
System.out.println(requestOk ? "Response OK" : "Response Error");
if (!requestOk) {
writer.write("HTTP/1.0 404 Not Found\r\n");
writer.write("Content-Length: 0\r\n");
writer.write("\r\n");
writer.flush();
}else {
String data = "<html><body><h1>Hello, world!</h1></body></html>";
int length = data.getBytes(StandardCharsets.UTF_8).length;
writer.write("HTTP/1.1 200 OK\r\n");
writer.write("Connection: close\r\n");
writer.write("Content-Type: text/html\r\n");
writer.write("Content-Length: " + length + "\r\n");
writer.write("\r\n");
writer.write(data);
writer.flush();
HttpServer.Java代码:服务器端
package com.example.hello;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class HttpServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("server is running...");
while(true){
Socket socket=serverSocket.accept();
System.out.println("connected from " + socket.getRemoteSocketAddress());
Thread t = new Handler(socket);
t.start();
我使用Python等语言编写了Socket通信程序,通过Socket接口实现了网络通信。通过Socket编程,我可以实现客户端和服务器之间的通信,实现网络应用程序的网络功能。
基于TCP协议进行了Socket通信测试,并进行了验证。TCP是面向连接,可靠的数据传输协议,通过三次握手建立连接,并使用确认和重传机制来保证数据的可靠性。我编写了TCP的客户端和服务器程序,通过Socket接口进行连接和数据传输,并确保数据的可靠性和正确性。
我对TCP通信过程进行了分析,深入理解了TCP建立连接和数据传输的过程。在
1:协议 超文本传输协议 (HTTP) 文件传输协议 (FTP)
简单邮件传输协议 (SMTP) 网络新闻传输协议 (NNTP)
2:获取ip地址 InetAddress ip = InetAddress.getByName("baobao");
3:对应端口 Telnet协议(23) 简单邮件传输协议(25) 文件传输协议(21) 超文本传
一Java socket 说明
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socke
Linux操作系统基础知识:了解Linux的基本概念、命令行操作、文件系统、用户和权限管理等掌握网络编程相关知识,如 TCP/IP 协议栈、套接字(Socket)编程等,可以实现网络通信功能。
常见的二次开发库详细说明介绍,,如libcurl、OpenSSL、json-c、freetype等。
Linux下的网络编程——网络基础、socket编程(一)