java网络编程实现一个聊天程序.pdf

上传人:qwe****56 文档编号:74668183 上传时间:2023-02-27 格式:PDF 页数:7 大小:150.31KB
返回 下载 相关 举报
java网络编程实现一个聊天程序.pdf_第1页
第1页 / 共7页
java网络编程实现一个聊天程序.pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《java网络编程实现一个聊天程序.pdf》由会员分享,可在线阅读,更多相关《java网络编程实现一个聊天程序.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、序序j java网络编程实现一个聊天程序 ava网络编程实现一个聊天程序 网络编程l网络模型 OSI参考模型 TCP/IP参考模型 l网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 lIP地址:InetAddress 网络中设备的标识 不易记忆,可用主机名 本地回环地址:127.0.0.1 主机名:localhost l端口号 用于标识进程的逻辑地址,不同进程的标识 有效端口:065535,其中01024系统使用或保留端口。l传输协议 通讯的规则 常见协议:TCP,UDP TCP和UDP 1lUDP 将数据及源和目的封装成数据包中,不需要建立连接 每个数据报的大小在限制在

2、64k内 因无连接,是不可靠协议 不需要建立连接,速度快 lTCP 建立连接,形成传输数据的通道。在连接中进行大数据量传输 通过三次握手完成连接,是可靠协议 必须建立连接,效率会稍低 Socket lSocket就是为网络服务提供的一种机制。l通信的两端都有Socket。l网络通信其实就是Socket间的通信。l数据在两个Socket间通过IO传输。UDP传输 lDatagramSocket与DatagramPacket l建立发送端,接收端。l建立数据包。l调用Socket的发送接收方法。l关闭Socket。发送端与接收端是两个独立的运行程序。发送端 l在发送端,要在数据包对象中明确目的地I

3、P及端口。DatagramSocket ds=new DatagramSocket();byte by=“hello,udp”.getBytes();DatagramPacket dp=new DatagramPacket(by,0,by.length,InetAddress.getByName(“127.0.0.1”),10000);ds.send(dp);ds.close();接收端 l在接收端,要指定监听的端口。DatagramSocket ds=new DatagramSocket(10000);byte by=new byte1024;DatagramPacket dp=new Da

4、tagramPacket(by,by.length);ds.receive(dp);String str=new String(dp.getData(),0,dp.getLength();System.out.println(str+-+dp.getAddress();ds.close();Tcp传输最容易出现的问题 l客户端连接上服务端,两端都在等待,没有任何数据传输。l通过例程分析:因为read方法或者readLine方法是阻塞式。l解决办法:自定义结束标记 使用shutdownInput,shutdownOutput方法。演示tcp传输。2演示tcp传输。1,tcp分客户端和服务端。2,

5、客户端对应的对象是Socket。服务端对应的对象是ServerSocket。客户端,通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。因为tcp是面向连接的。所以在建立socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。需求:给服务端发送给一个文本数据。步骤:1,创建Socket服务。并指定要连接的主机和端口。import java.io.*;import .*;class TcpClient public static void main(String args)throws Exception /创建客户端的socket服务。指定目的主机

6、和端口 Socket s=new Socket(192.168.1.254,10003);/为了发送数据,应该获取socket流中的输出流。OutputStream out=s.getOutputStream();out.write(tcp ge men lai le.getBytes();s.close();需求:定义端点接收数据并打印在控制台上。服务端:1,建立服务端的socket服务。ServerSocket();并监听一个端口。2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。3,客户端如果发过来数据,那么服务端要使用

7、对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。4,关闭服务端。(可选)3class TcpServer public static void main(String args)throws Exception /建立服务端socket服务。并监听一个端口。ServerSocket ss=new ServerSocket(10003);/通过accept方法获取连接过来的客户端对象。while(true)Socket s=ss.accept();String ip=s.getInetAddress().getHostAddress();System.out.p

8、rintln(ip+.connected);/获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。InputStream in=s.getInputStream();byte buf=new byte1024;int len=in.read(buf);System.out.println(new String(buf,0,len);s.close();/关闭客户端./ss.close();-import java.io.*;import .*;/*演示tcp的传输的客户端和服务端的互访。需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。客户端:1,建立socket服务

9、。指定要连接主机和端口。2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。4,关闭客户端资源。class TcpClient2 public static void main(String args)throws Exception Socket s=new Socket(192.168.1.254,10004);OutputStream out=s.getOutputStream();4out.write(服务端,你好.getBytes();InputStream in=s.getInputStrea

10、m();byte buf=new byte1024;int len=in.read(buf);System.out.println(new String(buf,0,len);s.close();class TcpServer2 public static void main(String args)throws Exception ServerSocket ss=new ServerSocket(10004);Socket s=ss.accept();String ip=s.getInetAddress().getHostAddress();System.out.println(ip+.co

11、nnected);InputStream in=s.getInputStream();byte buf=new byte1024;int len=in.read(buf);System.out.println(new String(buf,0,len);OutputStream out=s.getOutputStream();Thread.sleep(10000);out.write(哥们收到,你也好.getBytes();s.close();ss.close();-编写一个聊天程序。有收数据的部分,和发数据的部分。这两部分需要同时执行。那就需要用到多线程技术。一个线程控制收,一个线程控制发。

12、因为收和发动作是不一致的,所以要定义两个run方法。而且这两个方法要封装到不同的类中。import java.io.*;import .*;5class Send implements Runnable private DatagramSocket ds;public Send(DatagramSocket ds)this.ds=ds;public void run()try BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in);String line=null;while(line=bufr.readL

13、ine()!=null)byte buf=line.getBytes();DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName(192.168.1.255),10002);ds.send(dp);if(886.equals(line)break;catch(Exception e)throw new RuntimeException(发送端失败);class Rece implements Runnable private DatagramSocket ds;public Rece(DatagramS

14、ocket ds)this.ds=ds;public void run()try while(true)byte buf=new byte1024;DatagramPacket dp=new DatagramPacket(buf,buf.length);ds.receive(dp);String ip=dp.getAddress().getHostAddress();String data=new String(dp.getData(),0,dp.getLength();if(886.equals(data)System.out.println(ip+.离开聊天室);break;System.

15、out.println(ip+:+data);catch(Exception e)throw new RuntimeException(接收端失败);6 class ChatDemo public static void main(String args)throws Exception DatagramSocket sendSocket=new DatagramSocket();DatagramSocket receSocket=new DatagramSocket(10002);new Thread(new Send(sendSocket).start();new Thread(new Rece(receSocket).start();7

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁