实验二 网络基础编程实验

2020-04-14 02:14

湖南大学 计算机网络实验报告二

1 / 22

《计算机网络》

实验报告

信息安全 2015年4月1日

湖南大学 计算机网络实验报告二

实验二 网络基础编程实验

一、实验目的

通过本实验,学习采用Socket(套接字)设计简单的网络数据收发程序,理解应用数据包是如何通过传输层进行传送的。 二、实验内容

2.1、编写TCP进行数据发送的简单程序(java)

TCPClient.javTaCPServer.java

2.2、编写UDP进行数据发送的简单程序(java)

UDPServer.javaUDPClient.java

2.3多线程\\线程池对比

TCPEchoClient.java

TCPEchoServerThread.javaTCPEchoServerPool.javaTCPEchoServer.java

2.4写一个简单的chat程序,编程语言不限。 三、实验程序

(1)TCP客户端TcpClient.java import java.io.*; import java.net.*;

public class TcpClient{

public static void main(String argv[]) throws Exception { String sentence;//定义客户消息

String modifiedSentence;//定义服务器消息

InetAddress address = InetAddress.getLocalHost();//获取本机端口

BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); //创建客户输入流

//创建一个Scoket实例:构造函数向指定的远程主机和端口建立一个TCP连接。address.getHostName()为本机IP地址;6789为TCP服务器端口

Socket clientSocket = new Socket(address.getHostName(),6789); //客户套接字 //通过套接字的输入输出流(I/O streams)进行通信

DataOutputStream outToServer = new DataOutputStream( clientSocket.getOutputStream()); //创建客户端到服务器的输出流

BufferedReader inFromServer = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); //创建服务端输入流

2 / 22

湖南大学 计算机网络实验报告二

sentence = inFromUser.readLine();//客户端读取客户输入消息

outToServer.writeBytes(sentence+'\\n'); //客户端发送消息到服务器端

modifiedSentence =inFromServer.readLine();//客户端接收来自服务器的消息 System.out.println(\/客户端显示服务器发送过来的消息

clientSocket.close(); //客户端关闭套接字 } }

(2)TCP服务器端TcpServer.java import java.io.*; import java.net.*;

public class TcpServer {

public static void main(String argV[]) throws Exception { String clientSentence;//定义接收的消息

String capitalizedSentence;//定义发送的消息

ServerSocket welcomeSocket= new ServerSocket(6789);

//创建一个ServerSocket实例,并指定本地端口,侦听该指定端口收到的连接 while(true){

Socket connectionSocket = welcomeSocket.accept();

//调用ServerSocket的accept()方法以获取下一个客户端连接,基于新建立的客户端连接,创建一个Socket实例,并由accept()方法返回。

BufferedReader inFromClient = new BufferedReader( new InputStreamReader(connectionSocket.getInputStream()));//创建客户端输入流

DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());//创建服务器输出流

//使用所返回的Socket实例的InputStream和OutputStream与客户端进行通信。 clientSentence = inFromClient.readLine(); //接收客户发送的信息

capitalizedSentence = clientSentence.toUpperCase()+'\\n'; //转换接收到的信息,小写变大写

outToClient.writeBytes(\输出给客户端 } } }

(3)UDP通信服务器端 UDPServer.java import java.io.*; import java.net.*;

public class UDPServer {

public static void main(String argV[]) throws Exception {

DatagramSocket serverSocket = new DatagramSocket (9876); //构造数据包套接字并将其绑定到主机上的端口9876

byte[] receiveData = new byte[1024]; //服务器从客户端接收到的信息 byte[] sendData = new byte[1024]; //服务器发送给客户端的信息 while(true){

3 / 22

湖南大学 计算机网络实验报告二

DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); //创建从客户端数据包

serverSocket.receive(receivePacket); //服务器从客户端接收数据包

String sentence = new String(receivePacket.getData()); //服务器接打开数据包得到消息

InetAddress IPAddress = receivePacket.getAddress();//获取客户端的IP地址

int port = receivePacket.getPort();//获取客户端端口

String capitalizedSentence = sentence.toUpperCase();//将接收的信息转为大写

sendData = capitalizedSentence.getBytes(); //转换后的消息 //服务器发送给客户端的数据包,将转换后的消息打包

DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port);

serverSocket.send(sendPacket);//服务器发送数据包给客户端 } } }

(4)UDP通信客户端 UDPClient.java import java.io.*; import java.net.*;

public class UDPClient{

public static void main(String argv[]) throws Exception { byte[] receiveData = new byte[1024]; //客户端接收的消息 byte[] sendData = new byte[1024]; //客户端发送的消息

BufferedReader inFromReader = new BufferedReader( new InputStreamReader(System.in));//客户输入流

DatagramSocket clientSocket = new DatagramSocket (); //客户端数据包套接字 InetAddress IPAddress = InetAddress.getLocalHost(); //获取本机IP地址 String sentence = inFromReader.readLine(); //客户端读取用户所输入的消息 sendData = sentence.getBytes(); //复制到要发送的消息

//客户端发送的数据包,这里将客户端要发送的消息,客户端的IP地址,端口打包 DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,9876);

clientSocket.send(sendPacket);//客户端套接字发送数据包

//客户端接收的数据包,数据包包含从服务器接收的消息,消息长度

DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);

clientSocket.receive(receivePacket); //客户端接收数据包

String modifiedSentence = new String(receivePacket.getData()); //将接收的数据包解开

System.out.println(\\客户端显示数据包里的消息 clientSocket.close(); //关闭套接字

4 / 22

湖南大学 计算机网络实验报告二

}}

(5)通过TCP协议与回馈服务器(echo server)进行通信的客户端TCPEchoClient.java import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;

import java.net.SocketAddress; public class TCPEchoServer{

private static final int BUFSIZE = 32;

public static void main(String[] args) throws IOException{ if (args.length != 1)//获取启动服务的端口

throw new IllegalArgumentException(\ int servPort = Integer.parseInt(args[0]); //分配一个端口用于启动server端

ServerSocket servSock = new ServerSocket(servPort); int recvMsgSize;

byte[] receiveBuf = new byte[BUFSIZE]; while (true){

Socket clntSock = servSock.accept(); //接收客户端的主动连接

SocketAddress clientAddress = clntSock.getRemoteSocketAddress(); System.out.println(\ InputStream in = clntSock.getInputStream(); OutputStream out = clntSock.getOutputStream(); while ((recvMsgSize = in.read(receiveBuf)) != -1) out.write(receiveBuf, 0, recvMsgSize); clntSock.close(); }}}

(6)为前面的客户端程序实现回馈服务器TCPEchoServer.java import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;

import java.net.SocketException; public class TCPEchoClient{

public static void main(String[] args) throws IOException{

if ((args.length < 2) || (args.length > 3)) // 传入的数据在2~3之间,0:地址 1:传输字符 <2:端口>

throw new IllegalArgumentException(\rt>]\

String server = args[0]; // ip地址或主机名称 byte[] data = args[1].getBytes();

int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;//默认端口为7

5 / 22


实验二 网络基础编程实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级英语下册Unit3Morepractice练习(新版)牛津深圳版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: