收藏 分销(赏)

JAVA套接字编程分析.doc

上传人:pc****0 文档编号:6982631 上传时间:2024-12-24 格式:DOC 页数:8 大小:70.63KB 下载积分:10 金币
下载 相关 举报
JAVA套接字编程分析.doc_第1页
第1页 / 共8页
JAVA套接字编程分析.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
JAVA套接字(Socket)编程分析 班级:11计科6班 姓名:叶创建 学号:201141402601 一、TCP 套接字编程 功能:服务端启动后,客户端往服务端发送小写字母,服务端返回大写字母。 new Socket(); 创建套接字对象 客户端 服务端 程序框图: new SocketServer(); 创建套接字服务 建立连接 创建输出流new OutputStreamWriter(),从键盘录入字母 accept();获得Socke对象,并监听客户端 new BufferedReader()获得输入流 new BufferedReader) 获得输入流,打印字母 toUpperCase()转换为大写字母 if 客户端发送OVER close()关闭套接字 new PrintWriter()创建输出流,输出大写字母 if 客户端发送OVER close()关闭套接字 TCP服务端程序代码: class TransServer { public static void main(String[] args) throws Exception { ServerSocket ssk = new ServerSocket(10001);//创建Socket服务 Socket sk = ssk.accept();//获取客户端Socket对象 String ip = sk.getInetAddress().getHostAddress();//获取客户端IP System.out.println(ip+"is connected..."); BufferedReader bufIn= new BufferedReader(new InputStreamReader(sk.getInputStream()));//获得输入流对象 PrintWriter out = new PrintWriter(sk.getOutputStream(),true);//获得输出流对象 String line =null; while((line=bufIn.readLine())!=null) { System.out.println(line); out.println(line.toUpperCase());//转换成小写 } sk.close(); ssk.close(); } }TCP客户端程序代码: class TransClient { public static void main(String[] args) throws Exception { Socket sk = new Socket("localhost",10001); BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(sk.getOutputStream(),true); BufferedReader bufIn = new BufferedReader(new InputStreamReader(sk.getInputStream())); String line = null; while((line=bufr.readLine())!=null) { if ("over".equals(line))//over结束对话 { break; } System.out.println(line); out.println(line); String str = bufIn.readLine(); System.out.println("server:"+str); } bufr.close(); sk.close(); } } 运行效果: TCP套接字分析: 1. 对于服务端ServerSocket ssk = new ServerSocket(10001);创建Socket服务,接收端口为10001,这个端口必须是唯一的,范围在0~65535之间. 2. 客户端创建Socket服务,往服务端IP的10001端口发送数据;服务端调用ssk.accept();获取客户端的Socket对象,监听的端口为10001 3. 获取客户端发送的数据,即输入流. 4. 把字母转换后生成输出流,传回给客户端. 5. 最好关闭套接字对象. 6. 其中对于输入流和输出流,这些输入IO技术,因为传送的是字母,不是二进制文件,所以只需调用字符流对象即可. 7. 服务端只有一个,而客户端有多个,每一个客户端连接服务端的时候,服务端都会获得一个Socket对象,所以在程序池里面会有多个不同的Socket对象. 8. ssk.accept()是个阻塞方法,所以在编写程序的时候要特别注意,不能让服务端和客户端同时在等待. 9. 多个客户端连接服务端的时候需要排队,如需并发进行,需要运用java的多线程技术. 二、UDP套接字编程(UDP聊天室) new DatagramSocket()创建套接字 接收端 发送端 程序框图: new DatagramSocket(8085)创建套接字 new DatagramPacket() 创建包对象,指定监听端口 new DatagramPacket() 对数据进行打包,指定目的地IP和端口 ds.send(dp);发送包 ds.receive(dp);接受发送端数据 close()关闭套接字 if 客户端发送OVER close()关闭套接字 程序代码: import .*; import java.io.*; class 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; while((line=bufr.readLine())!=null ) { byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),81); ds.send(dp); if("886".equals(line)) break; } } catch (Exception e ) { throw new RuntimeException("发送端失败"); } } } class Rece implements Runnable { private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds=ds; } public void run() { try { while(true) { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String data = new String(dp.getData(),0 ,dp.getLength()); System.out.println(ip+":"+port+"-->>"+data); } } catch (Exception e ) { throw new RuntimeException("发送端失败"); } } } class ChatDemo { public static void main(String[] args) throws Exception { new Thread(new Send(new DatagramSocket(8085))).start(); new Thread(new Rece(new DatagramSocket(81))).start(); } } 运行效果 UDP套接字分析: 1. DatagramSocket()是java中创建UDP的Socket对象的构造方法,发送方调用该方法,指定程序的端口,用于识别程序.调用 DatagramPacket()对数据进行打包,指定目的地IP地址和接收端口,最后调用send()方法把包发送出去. 2. 接收方调用DatagramSocket(81)方法指定监听的端口,调用DatagramPacket()创建包,再调用ds.receive(dp)接收81端口发送过来的包.其中dp.getData()方法是获得包里面的数据,再打印在控制台上. 3. 发送端和接收端都用了while循环,不断接不断收.再调用java 的多线程技术使两个程序能过并发进行. 4. 该UDP聊天室只能在本地进行收发,如果需要改成局域网的聊天室,则只需要把发送端程序的目的IP改为广播地址,广播地址一般为网段后在最后一个IP.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服