使用 C++ (VC6、VS2003、VS2005、GCC4.1.2、GCC3.2.2)或 java(JDK1.6.0)两种语言 。
编写一个简单的 2 人点对点聊天工具,一方利用 IP 地址和端口连接另一方,可以相互发送文本信息。
基于Java的写法:
//这个类功能是接收对方发来的文本信息
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class SenderThread extends Thread {
//继承Thread类需要实现run()方法
public void run() {
try {
//端口设置为8888
// 注意:接收方的端口和发送方的端口要一致,
// 但是同一方的接收和发送两个端口不能相同
// 例如:A,B互发信息,A的发送端口为8888,接收端口为9999,
// 则B的发送端口为9999,接收端口为8888
DatagramSocket ds = new DatagramSocket(8888);
byte[] buf = new byte[1024];
//数据载体,这里是存放接收到的信息,设置缓存大小为1024;
DatagramPacket dp = new DatagramPacket(buf, 0, buf.length);
while (true) {
//接收文本信息
ds.receive(dp);
//将接收到的信息保存到字符串,并打印出来
String s = new String(dp.getData(), 0, dp.getLength());
System.out.println(s);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 该类的功能是发送数据报信息
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class Sender {
public static void main(String[] args) throws Exception {
//首先启动自己的接收的那个类,一直接收着对方发来的信息
new SenderThread().start();
DatagramSocket ds = new DatagramSocket();
Scanner sc = new Scanner(System.in);
while (true) {
//从键盘上输入
String s = sc.nextLine();
//将要发送的信息封装好
//各参数的意义:
//(要发送的数据:Byte[]类型,起始位置,长度,接收方的IP地址,发送端口)
DatagramPacket dp = new DatagramPacket(s.getBytes(), 0,
s.getBytes().length, InetAddress.getByName("10.40.8.7"),
8889);
//将数据发送出去
ds.send(dp);
}
}
}