计算机网络基于Java的Tcp服务器和客户端聊天程序_第1页
计算机网络基于Java的Tcp服务器和客户端聊天程序_第2页
计算机网络基于Java的Tcp服务器和客户端聊天程序_第3页
计算机网络基于Java的Tcp服务器和客户端聊天程序_第4页
计算机网络基于Java的Tcp服务器和客户端聊天程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络实验报告实验三学生姓名学生学号专业班级物联一班指导老师谢鲲完成日期2013.12.15、实验目的:1. 搞清楚什么是端口;明白什么是套接字(socket );2. 弄清楚网络通信在传输层传输数据的方式(两种:流传输(tcp )和数据报传输(udp),明白三种套接字编程方法(流式 套接字(SOCK_STREAM数据报套接字(SOCK_DGRAM原始套接 字(SOCK_RAW3.熟悉C+ MFC编程中的套接字编程;4. 了解tcp各种连接状态和套接字编程中服务器端和客户端 的编程步骤,以及各个步骤的含义;5.尝试实现流式套接字的服务器和客户端程序;二、实验要求:1.根据实验要求,交一份标

2、准的实验报告;2. 了解端口、套接字和TCP的各种连接状态;3. 理解通信过程中服务器端和客户端的通信过程;4. 尝试编写基于流式套接字的服务器和客户端程序;实验内容1、TCP各种连接状态(TCP套接字状态意义)TCP套接字解释状态意义CLOSED没有使用这个套接字LISTEN套接字正在监听入境连接SYN SENT套接字正在试图主动建立连接SYN RECEIVEDE在处于连接的初始同步状态ESTABLISHED连接已建立CLOSE WAIT远程套接字已经关闭:正在等待关闭这个套接FIN_WAIT_1套接字已关闭,正在关闭连接CLOSING套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认LAS

3、T_ACK远程套接字已,正在等待本地套接字的关闭确认FIN_WAIT_2套接字已关闭,正在等待远程套接字关闭TIME_WAIT这个套接字已经关闭,正在等待远程套接字的关闭传送2、Socket通信过程中服务器端和客户端的通信过程Socket是网络驱动层提供给应用程序编程的接口和一种数据发送、接收机制。Socket由应用程序创建,与网络 驱动层建立绑定机制,告诉网络驱动层当前应用程序所对应的IP地址和端口号。Socket数据发送过程:3、基于Java的Tcp服务器和客户端聊天程序服务器端:*p ackage myserver;import java.awt.eve nt.Acti on Eve n

4、t;import java.awt.eve nt.Actio nListe ner; import java.io.*;import java .n et.ServerSocket;import java .n et.Socket;import java.util.loggi ng丄evel;import java.util.loggi ng.Logger; import javax.swi ng.*;public class MyServer extends JFrame implements ActionListener, Runn able JTextArea jTextReceive

5、= new JTextAregi;JTextField jTextSe nd = new JTextField(); JButton jbs = new JButt on("发送"); ServerSocket server = nu II;JScroll Pane jsp = new JScroll Pan e(jTextReceive); Socket clie ntSocket;Socket对象boolea n flag = true;Thread connen Thread;BufferedReader sin;/负责当前线程中C/S通信中的/标记是否结束/向客户端

6、发送信息的线程/输入流对象Data Inpu tStream sin1|; DataOut putStream sout; boolea n flags = false;输出流对象p ublic static void main( Stri ngn args) MyServer MS = new MyServer();MS.serverStart()p ublic synchroni zed void cha ngeFlag(boolea n t)flags=t;P ublic void serverStartQ try server = new ServerSocket(8080);/ 建立

7、监听服this.setTitle(” 服务器端, 端口号:"+server.getLoca IP ort();this.setLayout (n ull);this.setBo un ds(20, 00, 300, 300);jTextSe nd.setBou nds(20, 120, 220, 50); jbs.setBo un ds(20, 170, 220, 30); this.add(jsp);this.add(jTextSe nd); this.add(jbs);this.setVisible(true);jbs.addAct ion Liste ner(this);whi

8、le (flag) clie ntSocket = server.acce pt(); jTextReceive.setText(连接已经建立完毕!n"); try(I np utStreamisdie ntSocket.getl np utStream() sinnewBufferedReader( newInp utStreamReader(is);try(Out putStreamosdie ntSocket.getOut putStreamHnewsin1Data Inp utStream(clie ntSocket.getl np utStream();sout = new

9、 DataOut pu tStream(os);connen Thread = new Thread(this); connen Thread.start();/ 启动线程,向客户端发送信息Stri ng aLine; while(true)aLi ne=si n1.readUTF();jTextReceive.append("客户端发来信息:"+aLine+"n");if (aLine.equals("bye") flag = false;connen Thread.i nterru pt(); break;rsout.close(

10、);sin .close();/关闭Socket连接/程序运行结束clie ntSocket.closeO; System.exit(0); catch (Excep ti on e) System.out .prin tl n( e);©Override p ublic void run() while (true) try ; catch (In terr up tedExce ptio n ex) Logger.getLogger(MyServer.class.getName().log(Level.SEVERE, null, ex); try if (flags = true

11、) cha ngeFlag(false)|;Stri ng str = jTextSe nd.getText().trim(); if(str=null|str.le ngth()v=0) elsesout.writeUTF(str);sout.flush();jTextReceive.append("服务器发送消息:"+str+"n");jTextSe nd.setText("") catch (Exce pti on e) System.out. prin tl n(e);©Overridepublic void fin

12、alize() / 析构方法 try ; / 停止 ServerSocket服务 catch (lOExce ptio n e) System.out. prin tl n(e);©Overridepublic void actio nP erformed(Actio nEve nt e) JButton jbt = (JButto n) e.getSource();if (jbt = jbs) /若单击确认对话框中的发送”按钮cha ngeFlag(true);客户端:package myclient;import java.awt.eve nt.Acti on Eve nt| i

13、mport java.awt.eve nt.Acti on Liste ner; import java.io.*;import java .n et.Socket;import java.util.logg in g.Level;import java.util.logg in g.Logger;import javax.swi ng.*;p ublic class MyClie nt exte nds JFrame imp leme nts Action Liste ner, Runn able Socket clientSocket;JTextArea jTextReceive = ne

14、w JTextArea(); JTextField jTextSe nd = new JTextField(); JButt on jbc = new JButt on ("发送”);JScroll Pane jsp = new JScroll Pan e(jTextReceive);boolea n flag = true;标记是否结束Thread connen Thread;/用于向服务器端发送信息Datal nputStream ci nil;DataOut putStream cout;static boolea n flagclie nt = false;public st

15、atic void main(String args) new MyClie ntO.clie ntStartO;p ublic synchroni zed void cha ngeFlag(boolea n t) _flagclie nt = t;p ublic void die ntStartO try /连接服务器端,这里使用本机this.setTitle("客户端,端口号:8080");this.setLayout(null);this.setBou nds(20, 00, 300, isp.setBo un ds(20, 20, 220,_ jTextSe nd.

16、setBo un ds(20, I20, 220, 50);jbc.setBou nds(20, 170, 220, 30);this.add(js p);this.add(jTextSe nd);this.add(jbc)jthis.setVisible(true);jbc.addActi on Liste ner(this);clie ntSocket = new Socket("localhost", 8080); jTextReceive.setText(连接已经建立完毕!n"); while (flag) try (Inp utStream is = d

17、ie ntSocket.getl np utStream()cin1 = new Datal np utStream(clie ntSocket.getl np utStream(); try (Out putStream os = clie ntSocket.getOut putStream() cout = new DataOut putStream(os);connen Thread = new Thread(this);connen Thread.start();启动线程,向服务器端发送信息String aLine; while (true) aLine = cin 1.readUTF

18、();jTextReceive.append(服务器发来信息:"+ aLine+ "n");if (aL in e.equals("bye") flag = false;connen Thread.i nterru pt();break_ 亍cout.close()ci n1.close();_JclientSocket.closeQ;/关闭 Socket连接System.exit(0); catch (Exce pti on e) System.out. prin tl n(e); Override p ublic void run() while (true) try Thread.slee p(10); catch (Interrup tedExce pti on ex) Logger.getLogger(MyClie nt.class.getName().log(Level.SEVERE,n ull, ex);try if (flagclie nt = true) Stri ng str = jTextSe nd.getText().tnm(); if(str=null|str.le ngth()v=0)elsejTextReceive.append(发送消息:"+ str +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论