您的位置:首页 > 编程语言 > Java开发

使用JAVA线程写的一个UDP简易通讯程序(三)

2017-05-23 14:58 519 查看
好记性不如赖笔头…………

服务器代码
package com.ckinghan.client;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPServer implements Runnable{
//接口
private int prot;

//构造方法
public UDPServer(int prot) {
super();
this.prot = prot;
}

@Override
public void run() {
//创建对象
DatagramSocket datagramSocket = null;
try {
//实例化对象
datagramSocket = new DatagramSocket(prot);
//接收最大的字节数(注意UDP最多一次性只能传送64K的数据)
byte[] bs = new byte[1024];
//创建接收传过来的消息对象
DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length);
//提示
System.out.println("服务端已启动:");
//循环接收数据
while (true) {
//接收数据并将数据传给datagramPacket
datagramSocket.receive(datagramPacket);
//获取接收到的字节长度
int len = datagramPacket.getLength();
//获取接收到的消息数据
byte[] message = datagramPacket.getData();
//将接收到的字节转换为字符并指定编码
String getMessage = new String(message, 0, len,"UTF-8");
//获取客户端的IP地址
InetAddress inetAddress = datagramPacket.getAddress();
//如果用户要退出
if("close".equals(getMessage.toLowerCase())){
break;
}
//输出用户的发送的消息内容
System.out.println(inetAddress.getHostAddress()+"的用户说:"+getMessage);
}
} catch (SocketException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
if(datagramSocket != null){
datagramSocket.close();
}
}

}

}


客户端代码

package com.ckinghan.client;

import java.io.BufferedInputStream;
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.net.SocketException;

public class UDPClient implements Runnable{
//服务器IP
private String ip;
//通讯接口
private int prot;
//构造 方法
public UDPClient(String ip,int prot) {
super();
this.ip = ip;
this.prot = prot;
}

@Override
public void run() {
//创建对象
DatagramSocket datagramSocket = null;
BufferedReader bufferedReader = null;
try {
//创建IP
InetAddress inetAddress = InetAddress.getByName(ip);
//实例化对象
datagramSocket = new DatagramSocket();
//从控制台接收数据
bufferedReader = new BufferedReader(new InputStreamReader(System.in));
//提示
System.out.println("客户端已启动,等待输入:");
//循环
while (true) {
//接收从控制台输入的数据
String sendMessageByte = bufferedReader.readLine();
//将输入的数据转换字节数组,并指定编码
byte[] bs = sendMessageByte.getBytes("UTF-8");
//创建连接
DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, inetAddress, prot);
//写入要发送的消息
datagramPacket.setData(bs);
//发送消息
datagramSocket.send(datagramPacket);
//如果用户要退出
if("close".equals(new String(sendMessageByte).toLowerCase())){
break;
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (java.net.UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
if(datagramSocket != null)
datagramSocket.close();
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

}


启动代码 1

package com.ckinghan.client;

public class StartThread {

public static void main(String[] args) {
//创建服务器对象并指定端口
UDPServer udpServer = new UDPServer( 10001);
//创建客户端对象,并指定服务器地址、端口
UDPClient udpClient = new UDPClient("192.168.0.124", 10000);
//创建线程
Thread server = new Thread(udpServer);
Thread client = new Thread(udpClient);
//启动线程
server.start();
client.start();

}

}


启动二

package com.ckinghan.client;

public class StartThread {

public static void main(String[] args) {
//创建服务器对象并指定端口
UDPServer udpServer = new UDPServer( 10000);
//创建客户端对象,并指定服务器地址、端口
UDPClient udpClient = new UDPClient("192.168.0.124", 10001);
//创建线程
Thread server = new Thread(udpServer);
Thread client = new Thread(udpClient);
//启动线程
server.start();
client.start();

}

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