您的位置:首页 > 理论基础 > 计算机网络

JAVA网络编程技术 - UDP练习,模仿多线程聊天室

2013-10-27 17:35 344 查看
今天学习了网络编程技术,了解了一些基本知识,知道什么是 UDP了。

跟着视频学啊学,反复看,做出来了第一个小例子。贴上代码,上面有我的注释,清晰的标明了整个过程的来龙去脉。稍后我学完整个网络编程技术的所有视频后我再贴上来我整理的一些资料。这里先记录下第一个小例子。

// 发送类
class SendMsg implements Runnable {

private DatagramSocket ds; // 指定一个对象

public SendMsg(DatagramSocket ds) {
super();
this.ds = ds;

}

@Override
public void run() {
// TODO Auto-generated method stub
// 数据来源
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
byte[] buf = new byte[1024];
try {
while ((line = bufr.readLine()) != null) {
buf = line.getBytes(); // 拿到的数据进行字节拆分
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("192.168.1.104"), 10002);// 数据进行封包
ds.send(dp);

if ("over".equals(line)) {
break;
}
}
ds.close(); // 结束输入端对象
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


// 接收对象
class ReveMsg implements Runnable {
private DatagramSocket ds;// 建立接收端对象

public ReveMsg(DatagramSocket ds) {
super();
this.ds = ds;
}

@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
byte[] buf = new byte[1024]; // 建立一个接收容器
DatagramPacket dp = new DatagramPacket(buf, 1024);// 接收数据存放到哪里,以及每次能接收多少
try {
ds.receive(dp); // 接收对象
String str = new String(dp.getData(), 0, dp.getLength());
String ip = dp.getAddress().getHostAddress();
int post = dp.getPort();
System.out.println(ip + "-" + post + " : " + str);
if(str.equals("over")){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(ip + "-" + post + " : " + "离开了聊天室,"+df.format(new Date()));
}
} catch (IOException e) {
e.printStackTrace();
}
}

}

}


主函数
package socket.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UdpChat {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

DatagramSocket send = new DatagramSocket();
DatagramSocket reve = new DatagramSocket(10002);// 接收端要指定端口了,要不对象不知道去哪里接收数据

new Thread(new SendMsg(send)).start();
new Thread(new ReveMsg(reve)).start();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: