Socket实现的UDPTCP通信试验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机通信网络实验
通信实验UDP/TCP
一、实验目的
熟练掌握UDP、TCP Client/Server模式的通信原理
二、实验内容
传输控制协议(Transport Control Protocol)是一种面向连接的,可靠的传输层协议。
面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。
可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。
TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正
常的次序进行重组,而且通过确认保证数据传输的完整性。
要通过TCP传输数据,必须在两端主机之间建立连接。
举例说明,TCP客户端需要和TCP服务端建立连接,过程如图所示:
客户端告诉服务标志置位。
客户端向服务端提出连接请求。
这时TCP SYN第一步中,。
报头的序列号区中插入自己的ISN端序列号区域合法,需要检查。
客户端在TCP,同时确认收)(SYN标志置位服务端收到该TCP分段后,在第二步以自己的ISN回应)。
TCP分段(ACK标志置位到客户端的第一个TCP。
到此为止建立完整的ISN(ACK标志置位)在第三步中,客户端确认收到服务端的连接,开始全双工模式的数据传输过程。
模式的通信程序。
根据以上内容编写一个TCP Client/Server 事实上网络程序是由两个部分组成:客户端、服务器端它们的建立步骤如下:服务器端socket-->bind-->listen-->accept
客户端socket-->connect
实验步骤三、
TCP Client/Server模式的通信程序;UDP1.编写、调试并运行自己编写的实现程序;2.
模式的工作原理,比较二者的不同,如出现异常情况,在TCP Client/Server3.了解实验报告中写出原因分析;
4.保留编写的实现程序。
四、实验过程
1.TCP Client/Server模式的通信程序
服务器端操作socket(套接字):
1.在初始化阶段调用WSAStartup()
2、建立Socket
3、绑定端口
4、监听
5、服务器端接受客户端的连接请求
6、发送及接收信息
7、结束socket 连接
相应的程序:
Server:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import .ServerSocket;
import .Socket;
public class Server {
public static final int PORT = 12345;//监听的端口号
public static void main(String[] args) {
祓瑳浥漮瑵瀮楲瑮湬尨服务器启动...\n);
Server server = new Server();
server.init();
}
public void init() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
// 一旦有堵塞, 则表示服务器与客户端获得了连接
Socket client = serverSocket.accept();
// 处理这次连接
new HandlerThread(client);
}
} catch (Exception e) {
祓瑳浥漮瑵瀮楲瑮湬尨服务器异常: + e.getMessage());
}
}
private class HandlerThread implements Runnable {
private Socket socket;
public HandlerThread(Socket client) {
socket = client;
new Thread(this).start();
}
public void run() {
try {
// 读取客户端数据
DataInputStream input = new
DataInputStream(socket.getInputStream());
String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛EOFException
// 处理客户端数据
祓瑳浥漮瑵瀮楲瑮湬尨客户端发过来的内容: + clientInputStr);
// 向客户端回复信息
DataOutputStream out = new
DataOutputStream(socket.getOutputStream());
祓瑳浥漮瑵瀮楲瑮尨请输入:\t);
// 发送键盘输入的一行
String s = new BufferedReader(new
InputStreamReader(System.in)).readLine();
out.writeUTF(s);
out.close();
input.close();
} catch (Exception e) {
祓瑳浥漮瑵瀮楲瑮湬尨服务器run 异常: + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (Exception e) {
socket = null;
祓瑳浥漮瑵瀮楲瑮湬尨服务端finally 异常: +
e.getMessage());
}
}
}
}
}
}
Client
//package com.defonds.socket.begin;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import .Socket;
public class Client {
public static final String IP_ADDR = 汜捯污潨瑳;//服务器地址
public static final int PORT = 12345;//服务器端口号
public static void main(String[] args) {
System.out.println(客户端启动?尮);
System.out.println(当接收到服务器端字符为 \OK\ 的时候, 客户端将终止屜屮);
while (true) {
Socket socket = null;
try {
//创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);
//读取服务器端数据
DataInputStream input = new
DataInputStream(socket.getInputStream());
//向服务器端发送数据
DataOutputStream out = new
DataOutputStream(socket.getOutputStream());
System.out.print(请输入?屜屴);
String str = new BufferedReader(new
InputStreamReader(System.in)).readLine();
out.writeUTF(str);
String ret = input.readUTF();
System.out.println(服务器端返回过来的是? + ret);
则断开连接 OK 如接收到//
if (作屋.equals(ret)) {
System.out.println(客户端将关闭连接);
Thread.sleep(500);
break;
}
out.close();
input.close();
} catch (Exception e) {
System.out.println(客户端异常尺 + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println(客户端 finally 异常尺 +
e.getMessage());
}
}
}
}
}
}
运行截图:
Server:
:Client
心得体会五、在实际的编程UDP/TCP通信实验中,我不仅进一步在本次
的编程命令,而且socket熟练掌握模式的通信原理有了更深的了解,知道了它们之间的差异,Client/ServerUDP中对、TCP
模式的通信需要“三次握手”建立连接,然后才能进行通信,而且服务器不TCPClient/Server 模式的通信却可以。
能同时与两个客户端进行连接,而UDPClient/Server编程实验中已经多socket虽然在上次的的编程命令有了一定的了解,但是在本次实验中socket的差TCPUDPClient/Server模式的通信的编程时,以为和我们还是遇到了不少问题,尤其是在进行的程序的基础上进行修改,结果出现了很多意想不到的问题。
但在我们上TCP别不大,就在网查询后都一一得到了解决。
通过本次实验,我解读和编写程序的能力都有了一定的提高,而且和同组的其他同学的合作也让我体会到了团队的力量永远胜过个人,总之,这次实验让我收获匪浅。