黑马程序员技术交流社区
标题:
UDP-聊天
[打印本页]
作者:
程序爱好者
时间:
2014-5-9 15:42
标题:
UDP-聊天
本帖最后由 程序爱好者 于 2014-5-12 11:17 编辑
import java.net.*;
import java.io.*;
class Send implements Runnable{
private DatagramSocket ds;
public Send(DatagramSocket ds)
{
this.ds=ds;
}
public void run()
{
try {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bf.readLine())!=null)
{
if("886".equals(line))
break;
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
ds.send(dp);
}
} catch (Exception e) {
System.out.println("发送端口失败!");
}
}
}
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();
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("接收端口失败!");
}
}
}
class ChatDemo
{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket=new DatagramSocket();
DatagramSocket receSocket=new DatagramSocket(10002);
new Thread(new Send(sendSocket)).start();
new Thread(new Rece(sendSocket)).start();
}
}
复制代码
我用MyEclipse 开发软件运行, 只能输入 没见在控制台打印,看了几个小时了,还不出来是代码问题还是软件操作错了,我创的是一个类 Send 里面就写下这些代码! 求高手帮我看一下
作者:
小周务商
时间:
2014-5-9 23:17
UDP不能实现聊天效果吧?只能发送和接收。聊天的用TCP。三次握手。
作者:
jsjchenlong
时间:
2014-5-9 23:37
看我下面的代码,你出错的地方,我都你给代码注释了,你看一下,我这里运行没有问题,给你的是正确的代码
记得要看我给你的注释,记得修改成你自己电脑的ip
package Test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class Send
implements Runnable {
private DatagramSocket ds;
public Send(DatagramSocket ds) {
this.ds = ds;
}
public void run() {
try {
BufferedReader bf = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
while ((line = bf.readLine()) != null) {
if ("886".equals(line))
break;
byte[] buf = line.getBytes();
//这里记着修改成你自己的ip,这里的端口号一定要和接收时你输入的端口号一致。
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("192.168.1.100"), 8888);
ds.send(dp);
}
} catch (Exception e) {
System.out.println("发送端口失败!");
}
}
}
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();
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + "::" + data);
}
} catch (Exception e) {
System.out.println("接收端口失败!");
}
}
}
class ChatDemo {
public static void main(String[] args) throws Exception {
DatagramSocket sendSocket = new DatagramSocket();
//我用的是8888端口这个比较稳定那个10002老是有问题,我用的地址是我自己的,你到时候修改成你的地址就可以了。
DatagramSocket receSocket = new DatagramSocket(8888);
//正确的代码如下
new Thread(new Send(sendSocket)).start();
new Thread(new Rece(receSocket)).start();
//你的代码是这么写的,只有发送没有接收当然会有问题了
//new Thread(new Send(sendSocket)).start();
//new Thread(new Rece(sendSocket)).start();
}
}
运行结果截图:
C:\Users\Pual\Desktop\运行结果.png
作者:
龙健
时间:
2014-5-10 01:07
不要太紧张,只是粗心大意而已,,,接收端没打开。。。。这就是UDP啊,只管发送,也不管是否能收到数据,,,但是聊天确实是用UDP做的,讲求快速嘛。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2