package sock;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
public class MySock {
public static void main(String[] args) throws Exception {
// ipAdd();
// send001();
// receive001();
DatagramSocket socket = new DatagramSocket();
DatagramSocket socket1 = new DatagramSocket(12332);
new Thread(new ChatSend(socket)).start();
new Thread(new ChatReceive(socket1)).start();
}
private static void receive001() throws Exception {
DatagramSocket so = new DatagramSocket(12345);
byte[] arr = new byte[1234];
DatagramPacket datagramPacket = new DatagramPacket(arr,arr.length);
so.receive(datagramPacket);
InetAddress address = datagramPacket.getAddress();
int port = datagramPacket.getPort();
byte[] data = datagramPacket.getData();
System.out.println(address+new String(data,0,datagramPacket.getLength())+port);
}
private static void send001() throws Exception {
DatagramSocket send = new DatagramSocket();
byte[] arr = "abcdeg".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(arr,arr.length, InetAddress.getByName("127.0.0.1"), 12345);
send.send(datagramPacket);
send.close();
}
private static void ipAdd() throws UnknownHostException {
InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : allByName) {
System.out.println(inetAddress.getHostAddress());
System.out.println(inetAddress.getHostName());
}
}
}
class ChatSend implements Runnable{
private DatagramSocket datagramSocket;
public ChatSend(DatagramSocket datagramSocket) {
this.datagramSocket = datagramSocket;
}
@Override
public void run() {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String res = null;
try {
while ((res = bufferedReader.readLine()) != null) {
if ("886".equals(res)) {
break;
}
DatagramPacket datagramPacket = new DatagramPacket(res.getBytes(), res.length(), InetAddress.getByName("127.0.0.1"), 12332);
datagramSocket.send(datagramPacket);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
datagramSocket.close();
}
}
}
class ChatReceive implements Runnable{
private DatagramSocket datagramSocket;
public ChatReceive(DatagramSocket datagramSocket) {
this.datagramSocket = datagramSocket;
}
@Override
public void run() {
byte[] arr = new byte[1234];
DatagramPacket datagramPacket = new DatagramPacket(arr, arr.length);
try {
while (true) {
datagramSocket.receive(datagramPacket);
InetAddress address = datagramPacket.getAddress();
byte[] data = datagramPacket.getData();
int port = datagramPacket.getPort();
System.out.println(address.getHostAddress()+":"+new String(data,0,datagramPacket.getLength())+":"+port);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
datagramSocket
.close();
}
}
}
主要的是使用注意到有基站,有包,有发送。地址的位置。
本文介绍了一个使用Java实现的UDP Socket通信示例,包括发送端和接收端的代码实现。通过创建DatagramSocket实例,使用DatagramPacket进行数据包的发送与接收,实现了本地主机间的简单聊天功能。
1842

被折叠的 条评论
为什么被折叠?



