黑马程序员技术交流社区
标题:
聊天程序的一点小疑问
[打印本页]
作者:
yangqing_tt
时间:
2015-4-19 15:06
标题:
聊天程序的一点小疑问
今天看着毕老师的视频写了一个聊天程序,但是有一点疑问,希望能有人给解答,非常感谢!
发送端数据封装的时候,怎么才能写才能是动态的接收端端口号码,不用每当接收端端口号码改一次,发送端就得改一次程序?
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* 聊天程序
*
* @author Administrator
*
*/
public class UdpChatDemo {
public static void main(String[] args) {
DatagramSocket sendSocket = null;
DatagramSocket recoSocket = null;
try {
sendSocket = new DatagramSocket();
recoSocket = new DatagramSocket(10000);
} catch (SocketException e) {
e.printStackTrace();
}
new Thread(new Send(sendSocket)).start();
new Thread(new Reco(recoSocket)).start();
}
}
//发送端
class Send implements Runnable {
private DatagramSocket ds;
public Send(DatagramSocket ds) {
this.ds = ds;
}
public void run(){
try{
//键盘输入流
BufferedReader bfw = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bfw.readLine()) != null){
//数组缓冲区
byte[] buf = line.getBytes();
//发送端数据封装包
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(""),10000);
//发送数据
ds.send(dp);
//如果发送“baibai”,则退出
if("baibai".equals(line))
break;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//接收端
class Reco implements Runnable {
private DatagramSocket ds;
public Reco(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();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip + "::" + data);
//如果对方发送baibai,则证明对方离开聊天室了
if("baibai".equals(data))
{
System.out.println(ip + "离开了聊天室!");
break;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2