提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
写个基础的JAVA网络程序,实现双工通信
一、两个类
1.一个类
代码如下(示例):
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class send {
public static void main(String[] args) throws IOException {
Thread t1 = new send.re();
Thread t2 = new send.se();
t1.start();
t2.start();
}
static class re extends Thread {
DatagramSocket ds;
re() throws SocketException {
ds = new DatagramSocket(3000);
}
public void run() {
while (true) {
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
try {
ds.receive(dp);
} catch (IOException e) {
e.printStackTrace();
}
System.out.print(dp.getAddress().getHostAddress()+":"+dp.getPort()+"--->");
System.out.println(new String(bys, 0, dp.getLength()));
}
}
}
static class se extends Thread {
@Override
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
while (true) {
Scanner sc=new Scanner(System.in);
String s = sc.nextLine();
byte[] bys = s.getBytes();
int len = bys.length;
DatagramPacket dp = null;
try {
dp = new DatagramPacket(bys, len, InetAddress.getByName("127.0.0.1"), 8954);
} catch (UnknownHostException e) {
e.printStackTrace();
}
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.另一个类
代码如下(示例):
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class receive {
public static void main(String[] args) throws IOException {
Thread t1=new re();
Thread t2=new se();
t1.start();
t2.start();
/*
DatagramSocket ds=new DatagramSocket(10086);
byte []bys=new byte[1024];
DatagramPacket dp=new DatagramPacket(bys,bys.length);
ds.receive(dp);
System.out.println(new String(bys,0,dp.getLength()));
*/
}
static class re extends Thread{
@Override
public void run() {
DatagramSocket ds= null;
try {
ds = new DatagramSocket(8954);
} catch (SocketException e) {
e.printStackTrace();
}
while(true){
byte []bys=new byte[1024];
DatagramPacket dp=new DatagramPacket(bys,bys.length);
try {
ds.receive(dp);
} catch (IOException e) {
e.printStackTrace();
}
System.out.print(dp.getAddress().getHostAddress()+":"+dp.getPort()+"--->");
System.out.println(new String(bys,0,dp.getLength()));
}
}
}
static class se extends Thread{
DatagramSocket ds;
se() throws SocketException {
ds = new DatagramSocket();
}
public void run() {
while(true){
Scanner sc=new Scanner(System.in);
String s = sc.nextLine();
byte [] bys=s.getBytes();
int len =bys.length;
DatagramPacket dp= null;
try {
dp = new DatagramPacket(bys,len, InetAddress.getByName("127.0.0.1"),3000);
} catch (UnknownHostException e) {
e.printStackTrace();
}
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
总结
一个类里两个套接,一个发送,一个接受。两个发送端口未指定,系统随机分配。两个发送打包端口各自指向另一个类里的接受套接。。。。。。。。
结束!!!!