ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:264.37KB ,
资源ID:12832869      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12832869.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二网络基础编程实验.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二网络基础编程实验.docx

1、实验二网络基础编程实验计算机网络实验报告信息安全2015年 4 月 1日实验二网络基础编程实验一、 实验目的通过本实验,学习采用 Socket (套接字)设计简单的网络数据收发程序,理解应用数据 包是如何通过传输层进行传送的。二、 实验内容2.1、编写TCP进行数据发送的简单程序(java)TCPCIient. j a vTaC PServer .javaUDPServer.java UDPCIient.java2.3多线程线程池对比TCPEchoCIient.java2.4写一个简单的chat程序,编程语言不限。三、实验程序(1)TCP客户端 TcpCIient.java |import j

2、ava.io.*;import java .n et.*;public class TcpClie ntpublic static void main( Stri ng argv) throws Exceptio n Stri ng senten ce; 定义客户消息Stri ng modifiedSe nte nce; 定义服务器消息In etAddress address = In etAddress.getLocalHost(); 获取本机端口BufferedReader inFro mUser = new BufferedReader( new In putStreamReader(S

3、ystem.i n); / 创建客户输入流/创建一个Scoket实例:构造函数向指定的远程主机和端口建立一个 TCP连接。address.getHostName() 为本机IP地址;6789为TCP服务器端口Socket clie ntSocket = new Socket(address.getHostName(),6789); / 客户套接字/通过套接字的输入输出流(I/O streams) 进行通信DataOutputStream outToServer = new DataOutputStream( clie ntSocket.getOutputStream(); II 创建客户端到服

4、务器的输出流BufferedReader inF romServer = new BufferedReader( new In putStreamReader(clien tSocket.getI nputStream(); II 创建服务端输入流se ntence = inF romUser.readLi ne(); 客户端读取客户输入消息outToServer.writeBytes(se nten ce+n); / 客户端发送消息到服务器端modifiedSe nte nee =in FromServer.readL in e();/ 客户端接收来自服务器的消息System.out.pri

5、 ntl n(clie nt receive from TCP server: + modifiedSe nten ce);/客户端显示服务器发送过来的消息clie ntSocket.close(); / 客户端关闭套接字(2)TCP服务器端 TcpServer.javaimport java.io.*;import java .n et.*;public class TcpServer public static void main(String argV) throws Exception Stri ng clie ntSe nte nce; 定义接收的消息Stri ng capitali

6、zedSe nten ce;/ 定义发送的消息ServerSocket welcomeSocket= new ServerSocket(6789);/创建一个ServerSocket实例,并指定本地端口,侦听该指定端口收到的连接while(true)Socket conn ecti on Socket = welcomeSocket.accept();/调用ServerSocket的accept()方法以获取下一个客户端连接,基于新建立的 客户端连接,创建一个 Socket实例,并由accept()方法返回。BufferedReader inF romClie nt = new Buffere

7、dReader( new In putStreamReader(conn ectio nSocket.getl nputStream(); 创建客户端输入流DataOutputStream outToClie nt = new DataOutputStream(c onnection Socket.g etOutputStream(); 创建服务器输出流/ 使用所返回的Socket实例的InputStream和Outputstream与客户端进行通信。接收客户发送的信息clie ntSe nte nee = inF romClie nt.readLi ne(); /转换接收到输出给客户构造数据

8、包套接capitalizedSe ntence = clie ntSe nten ce.toUpperCase()+n; /的信息,小写变大写outToClient.writeBytes(TCP accept +capitalizedSentence);/ 端(3)UDP通信服务器端 UDPServer.javaimport java.io.*;import java .n et.*;public class UDPServer public static void main(String argV) throws Exception DatagramSocket serverSocket =

9、 new DatagramSocket (9876); /字并将其绑定到主机上的端口 9876服务器从客户端接收到的信息服务器发送给客户端的信息byte receiveData = new byte1024; /byte sen dData = new byte1024; /while(true)3 / 22DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveD ata.length); / 创建从客户端数据包serverSocket.receive(receivePacket); / 服务器从客户端接收数据

10、包String sentence = new String(receivePacket.getData(); / 服务器接打开 数据包得到消息InetAddress IPAddress = receivePacket.getAddress();/ 获取客户端的 IP 地 址int port = receivePacket.getPort();/ 获取客户端端口String capitalizedSentence = sentence.toUpperCase();/ 将接收的信息转为 大写sendData = capitalizedSentence.getBytes(); / 转换后的消息/ 服

11、务器发送给客户端的数据包,将转换后的消息打包DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.lengt h,IPAddress,port);serverSocket.send(sendPacket);/ 服务器发送数据包给客户端(4)UDP通信客户端 UDPCIient.javaimport java.io.*;import .*;pubIic cIass UDPCIientpubIic static void main(String argv) throws Exception byte receiveData

12、 = new byte1024; / 客户端接收的消息byte sendData = new byte1024; / 客户端发送的消息BufferedReader inFromReader = new BufferedReader( new InputStreamReader(Sy stem.in);/ 客户输入流DatagramSocket cIientSocket = new DatagramSocket (); / 客户端数据包套接字InetAddress IPAddress = InetAddress.getLocaIHost(); / 获取本机 IP 地址String sentenc

13、e = inFromReader.readLine(); / 客户端读取用户所输入的消息sendData = sentence.getBytes(); / 复制到要发送的消息/ 客户端发送的数据包,这里将客户端要发送的消息,客户端的 IP 地址,端口打包DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.Iength,IPAddress,9876);cIientSocket.send(sendPacket);/ 客户端套接字发送数据包/ 客户端接收的数据包,数据包包含从服务器接收的消息,消息长度DatagramPac

14、ket receivePacket = new DatagramPacket(receiveData,receiveData.Iength);cIientSocket.receive(receivePacket); / 客户端接收数据包String modifiedSentence = new String(receivePacket.getData(); / 将接收的数据包解开System.out.printIn(cIient receive from UDP server: + modifiedSentence + from from the cIient!); / 客户端显示数据包里的消

15、息cIientSocket.cIose(); / 关闭套接字通过TCP协议与回馈服务器(echo server )进行通信的客户端 TCPEchoClient.javaimport java.i o.I OExcepti on;import java.i o.ln putStream;import java.io.OutputStream;import java .n et.ServerSocket;import java .n et.Socket;import java .n et.SocketAddress;public class TCPEchoServerprivate static

16、final int BUFSIZE = 32;public static void main( Stri ng args) throws IOExcepti onif (args.le ngth != 1)/ 获取启动服务的端口throw new IllegalArgumentException(Parameter(s): );int servPort = In teger.parse In t(args0);/分配一个端口用于启动 server端ServerSocket servSock = new ServerSocket(servPort);int recvMsgSize;byte re

17、ceiveBuf = new byteBUFSIZE;while (true)Socket cl ntSock = servSock.accept(); / 接收客户端的主动连接SocketAddress clie ntAddress = cln tSock.getRemoteSocketAddress();System.out.println(Handling client at + clientAddress);In putStream in = cln tSock.getI nputStream();OutputStream out = cln tSock.getOutputStream

18、();while (recvMsgSize = in. read(receiveBuf) != -1) out.write(receiveBuf, 0, recvMsgSize);cln tSock.close();为前面的客户端程序实现回馈服务器 TCPEchoServer.javaimport java.i o.I OExcepti on;import java.i o.ln putStream;import java.io.OutputStream;import java .n et.Socket;import java .n et.SocketExcepti on;public cla

19、ss TCPEchoClie ntpublic static void main(String args) throws IOExceptionif (args.length 3) / 传入的数据在 23 之间,0:地址1 :传输字符throw new IllegalArgumentException(Parameter(s): );Stri ng server = args0; / ip 地址或主机名称byte data = args1.getBytes();int servPort = (args .len gth = 3) ? In teger.parse In t(args2) : 7

20、;默认端口为75 / 22Socket socket = new Socket(server, servPort);System.out.pri ntln (C onn ected to server.se nding echo stri ng);In putStream in = socket.get In putStream();OutputStream out = socket.getOutputStream();out.write(data);int totalBytesRcvd = 0;int bytesRcvd;while (totalBytesRcvd data.length)

21、if (bytesRcvd = in.read(data, totalBytesRcvd,data.length - totalB ytesRcvd) = -1)throw new SocketExcepti on (C onnection closed prematurely); totalBytesRcvd += bytesRcvd;System.out.pri ntln (Received: + new Strin g(data);socket.close();(7)一客户一线程/二、每个客户端请求都新启一个线程的 Tcp服务端:import java.io.IOException;im

22、port java .n et.ServerSocket;import java .n et.Socket;import java.util.logg in g.Logger;public class TCPEchoServerThread public static void main(String args) throws Exception /IOExceptionServerSocket servSock = new ServerSocket(5500);Logger logger = Logger.getLogger(practical);while (true) Socket cl

23、n tSock = servSock.accept(); / Block wait ing for conn ectioThread thread = new Thread( new EchoProtocol(cl ntSock, logger); thread.start();logger.i nfo(Created and started Thread + thread.getName();(8)线程池/三、固定线程数的 Tcp服务端import java.i o.I OExcepti on;import java .n et.ServerSocket;import java .n et.

24、Socket;import java.util.logg in g.Level;import java.util.logg in g.Logger;public class TCPEchoServerPool public static void main(String args) throws IOException int threadPoolSize = 3; / Fixed ThreadPoolSizefinal ServerSocket servSock = new ServerSocket(5500);final Logger logger = Logger.getLogger(p

25、ractical);for (int i = 0; i Loadlco n(IDR_MAINFRAME);void CNetChatServerDlg:DoDataExcha nge(CDataExcha nge* pDX) AFX_DATA_MAP(CNetChatServerDlg) DDX_Co ntrol(pDX, IDC_PORT, m_portCtrl);DDX_Co ntrol(pDX, IDC_EDIT_MSG, m_editMsg);DDX_C on trol(pDX, IDC_SHOW_MSG, m_showMsg); DDX_Text(pDX, IDC_PORT, m_s

26、erverPort);BEGIN_MESSAGE_MAP(CNetChatServerDlg, CDialog) /AFX_MSG_MAP(CNetChatServerDlg) ON_MESSAGE(WM_SOCKET, On Socket) ON_WM_SYSCOMMAND()ON_WM_PAINT()7 / 22 ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_START_SERVER, OnStartServer) ON_BN_CLICKED(IDC_SEND_MSG, OnSendMsg) ON_EN_MAXTEXT(IDC_SHOW_MSG, OnMa

27、xtextShowMsg) /AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CNetChatServerDlg:OnInitDialog()CDialog:OnInitDialog();SetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small icon/ TODO: Add extra initialization hereCtrlState(FALSE); m_portCtrl.SetLimitText(5);/65535 return TRUE; / return TRUE unless you set the focus to a controlvoid CNetChatServerDlg:OnSysCommand(UINT nID, LPARAM lParam) if(nID & 0xFFF0) = SC_CLOSE & m_serverSocket != INVALID_SOCKET) OnStartServer();CDialog:OnSysCommand(nID, lParam);void CNetChatServerDlg:OnPaint() if (I

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1