赞
踩
全栈工程师开发手册 (作者:栾鹏)
java教程全解
java实现UDP服务器、客户端
java实现qq聊天系统,需要知道彼此的ip地址和端口号。
数据传输使用UDP数据包,我们将首先发送数据的设为客户端,将响应回复的设为服务器端。
所以需要先启动服务器端,等待客服端的发起,再启动客户端发起数据传输。使用控制台作为数据的输入和输出。
服务器端代码
package com.lp.app.net; import java.net.*; import java.io.*; import java.util.*; //使用udp数据报创建的聊天服务器 public class UDPServer{ public static void main(String[] args){ new UDPServer(); } static final int PORT = 4000;//设置服务端口 private byte[] buf = new byte[1000]; private DatagramPacket dgp =new DatagramPacket(buf,buf.length); private DatagramSocket sk; //服务端构造器,实现读取用户输入和通讯 public UDPServer(){ try{ //实例化数据报 sk = new DatagramSocket(PORT); System.out.println("服务器启动................."); while(true){ //等待接收 sk.receive(dgp); //获取接收信息 String rcvd = "接收到包来自 "+ dgp.getAddress() + ", " + dgp.getPort() + ": "+ new String(dgp.getData(),0,dgp.getLength()); System.out.println(rcvd); String outMessage =""; //读取输入 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); try{ outMessage = stdin.readLine(); }catch(IOException ie){ System.err.println("IO error!"); } String outString = "服务器说: "+ outMessage; //拷贝字符到缓存 byte[] buf = outString.getBytes(); //打包数据,发送回信息。 DatagramPacket out = new DatagramPacket(buf,buf.length,dgp.getAddress(),dgp.getPort()); sk.send(out); } }catch(SocketException e){ System.err.println("Can't open socket"); System.exit(1); }catch(IOException e){ System.err.println("Communication error"); e.printStackTrace(); System.exit(1); } } }
客户端代码
package com.lp.app.net; import java.net.*; import java.io.*; //这是一个使用udp数据报通讯方式的聊天程序的客户端 public class UDPClient{ public static void main(String[] args){ new UDPClient(); } private DatagramSocket socket; private InetAddress hostAddress; private byte[] buf = new byte[1000]; private DatagramPacket dp = new DatagramPacket(buf,buf.length); //构造器,这里实现接收用户输入和与服务器通讯 public UDPClient(){ try{ //使用构造器,创建使用本机任何可用端口的数据包Socket socket = new DatagramSocket(); //获取本地IP hostAddress = InetAddress.getByName("localhost"); System.out.println("客户端启动............"); while(true){ String outMessage =""; //读取输入 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); try{ outMessage = stdin.readLine(); }catch(IOException ie){ System.err.println("IO error!"); } String outString = "客户端说: "+ outMessage; byte[] buf = outString.getBytes(); //打包数据,发送数据 DatagramPacket out = new DatagramPacket(buf,buf.length,hostAddress,UDPServer.PORT); socket.send(out); //等待服务器返回 socket.receive(dp); String rcvd = "接收到包来自 "+ dp.getAddress() + ", " + dp.getPort() + ": "+ new String(dp.getData(),0,dp.getLength()); System.out.println(rcvd); } }catch(UnknownHostException e){ System.out.println("Can;t open socket"); System.exit(1); }catch(SocketException e){ System.out.println("Can;t open socket"); e.printStackTrace(); System.exit(1); }catch(IOException e){ System.err.println("Communication error"); e.printStackTrace(); System.exit(1); }catch(Exception e){ System.err.println("Communication error"); e.printStackTrace(); System.exit(1); } System.out.println("ChatClient over"); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。