代码纯记事本书写,不保证正确
TCP
一、任务:使用tcp协议实现客户端发送数据,服务器接收并在控制台显示。
二、代码实现:
1、MyServerSocket:等待客户端连接,并将socket对象传递至ServerSocketThread类来进行交互。
class MyServerSocket{
// 此类中创建服务器,获取客户端socket。传递至服务器线程类ServerSocketThread进行交互。
public static void main(String[] argv)throws Exception{
ServerSocket server = new ServerSocket(8888);// 使用8888端口
while(true){
Socket socket = server.accept();// 接收客户端socket
System.out.println("新用户连接");
new Thread(new ServerSocketThread(socket)).start();// 新建线程处理客户端
}
}
}
2、ServerSocketThread:处理客户端发送的消息并在控制台显示。
class ServerSocketThread implements Runnable {
// 此类中接收客户端socket并处理
private BufferedReader bufferedReader;// 输入流
private PrintStream printStream;// 输出流
private Socket socket;// 客户端
/***
* 构造方法初始化socket与输入输出流
***/
public ServerSocketThread(Socket socket){
this.socket = socket;
printStream = new PrintStream(socket.getOutputStream());// 获取输出流
// 获取输入流
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void run(){
while(true){
try{
String str = bufferedReader.readLine();// 等待接收
System.out.println("接收到:"+str);// 控制台显示
}catch(Exception e){
e.printStackTrace
}
}
}
}
3、Client:客户端类进行数据的发送。
class Client{
// 此类创建客户端并连接服务器,发送消息
public static void main(String[] argv) throws Exception{
Socket socket = new Socket("127.0.0.1",8888);// 链接服务器
PrintStream printStream = new PrintStream(socket.getOutputStream());// 实例化输出流
while(true){
printStream.println("测试");// 输出测试
printStream.flush();// 刷出
Thread.sleep(1000);// 睡眠1秒
}
}
}
UDP
一、任务:使用udp协议实现两用户进行数据的发送与接收
1、udp8888:使用端口8888向端口9999发送数据并使用UDP_JieShouThread类来接收数据。
class udp8888{
// 启动8888端口作为udp端口,并发送数据
public static void main(String[] argv)throws Exception{
DatagramSocket socket = new DatagramSocket(8888);
String str = "端口8888";
// 实例化数据包
DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().lenfth(),InetAddress.getByName("localhost"),9999);
// 启动接收线程
new Thread(new UDP_JieShouThread(socket)).start();
while(true){
socket.send(data);
Thread.sleep(1000);
}
}
}
2、udp9999:同1使用端口9999向端口8888发送数据并使用UDP_JieShouThread类来接收数据。
class udp9999{
// 启动8888端口作为udp端口,并发送数据
public static void main(String[] argv)throws Exception{
DatagramSocket socket = new DatagramSocket(9999);
String str = "端口9999";
// 实例化数据包
DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().length(),InetAddress.getByName("localhost"),8888);
// 启动接收线程
new Thread(new UDP_JieShouThread(socket)).start();
while(true){
socket.send(data);
Thread.sleep(1000);
}
}
}
3、UDP_JieShouThread:使用多线程接收数据并在控制台显示。
class UDP_JieShouThread implements Runnable {
// udp接收处理。接收datagramsocket对象使用recevxxx方法接收。
private DatagramSocket socket;
public UDP_JieShouThread(DatagramSocket socket){
this.socket = socket;
}
public void run{
try{
byte[] buff = new byte[1024];
DatagramPacket data = new DatagramPacket(buff,100);
while(true){
socket.receive(data);
System.out.println(new String(buff,0,data.getlength()));
}
}catch(Exception e){
e.printStackTrace();
}
}
}
总结:使用tcp与udp相关api简单实现了数据的收发,可在此基础上进行数据的群发,指定用户发送等练习。