心得11--网络编程2-QQ、飞秋等聊天室部分网络编程
聊天室前奏:先来些辅助工作,通过四个案例慢慢深入了解聊天室的内幕,下期与大家分享聊天室的编写
1.案例一:发送端
packagecom.packet;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
publicclass SendDemo {
public static void main(String[] args) throwsException {
//建立UPDSocket
DatagramSocket ds = new DatagramSocket();
//建立数据包
byte[] buf = "I am a guy!!".getBytes();
DatagramPacket dp = newDatagramPacket(buf,buf.length,InetAddress.getByName("192.168.49.255"),9009);
//发送
ds.send(dp);
//关闭
ds.close();
}
}
2. 案例二:接收端
packagecom.packet;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
publicclass ReceiveDemo {
public static void main(String[] args) throwsException {
//建立UPDSocket
DatagramSocket ds = newDatagramSocket(9009);
//建立数据包
byte[] buf = new byte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
//接收
ds.receive(dp);
//通过数据包对象的方法接收数据
String ip =dp.getAddress().getHostAddress();
String date = newString(dp.getData(),0,dp.getLength());
int port = dp.getPort(); //获取端口
System.out.println(ip+":"+date+":"+port);
//关闭
ds.close();
}
}
3. 可以键盘录入的发送端
packagecom.packet;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
publicclass SendDemo1 {
public static void main(String[] args) throwsException {
//建立UPDSocket
DatagramSocket ds = new DatagramSocket();
//建立数据包
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
String line = null;
while((line=br.readLine())!=null){
byte[] buf = line.getBytes();
DatagramPacket dp = newDatagramPacket(buf,buf.length,InetAddress.getByName("192.168.49.255"),9009);
//发送
if(line.equals("886")){
ds.send(dp);break;
}
ds.send(dp);
}
//关闭
ds.close();
}
}
4.可以无限接收的接收端
packagecom.packet;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
publicclass ReceiveDemo1 {
/**
* 无限接收消息,当接收的是886时退出程序
* 接收端口;与前例不同这里没有IP的输出而是换成特定字符串;
* @throwsIOException
*/
public static void main(String[] args) throwsException {
//建立UPDSocket
DatagramSocket ds = newDatagramSocket(9009);
//建立数据包
while(true){
byte[] buf = new byte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
//发送
ds.receive(dp);
String ip =dp.getAddress().getHostAddress();
String date = newString(dp.getData(),0,dp.getLength());
int port = dp.getPort(); //获取端口
if(date.equals("886")){
System.out.println(ip+":"+date+":"+port);break;
}
System.out.println(ip+":"+date+":"+port);
}
//关闭
ds.close();
}
}