UDP套接字
实现返回发送消息的大写;
客户端:
package UDPTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
public class UDPClient {
public static void main(String[] args)throws IOException {
//获取主机地址和设置一个端口号
InetAddress serverName = InetAddress.getLocalHost();
int serverPort = 12000;
//创建客户端的UDP套接字
DatagramSocket clientSocket = new DatagramSocket();
//输入一个字符串
Scanner input = new Scanner(System.in);
String massage = input.next();
//输入的字符串转化为字节数组
byte[] bySend = massage.getBytes();
//定义一个空的字节数组用来接收数据
byte[] byReceive = new byte[1024];
//获取字节数组的长度
int lengthSend = bySend.length;
//获取收到的字节数组的长度
int lengthReceive = byReceive.length;
//创建DatagramPacket对象封装将要发送的字节数组的指针,长度,目的地址IP和端口号
DatagramPacket packet = new DatagramPacket(bySend, lengthSend, serverName, serverPort);
//发送
clientSocket.send(packet);
//创建DatagramPacket对象封装将要接收的字节数组的指针
DatagramPacket modifiedPacket = new DatagramPacket(byReceive, lengthReceive);
//接收
clientSocket.receive(modifiedPacket);
//创建String对象接收服务端回复的数据
String receive = new String(modifiedPacket.getData());
//输出
System.out.println(receive);
//客户端UDP套接字关闭
clientSocket.close();
}
}
服务端:
package UDPTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args)throws IOException {
//定义服务器的端口号为12000
int severPort = 12000;
//创建一个空的字节数组用来接收客户端发来的数据
byte[] byReceive = new byte[1024];
//创建一个服务端UDP套接字,并指定端口号
DatagramSocket serverSocket= new DatagramSocket(severPort);
//服务器保持开启状态
while (true){
//创建一个DatagramPacket用来封装将要接收的客户端发送的指针数组
DatagramPacket ReceiveData = new DatagramPacket(byReceive, byReceive.length);
//接收
serverSocket.receive(ReceiveData);
//创建一个String对象用来接收数据
String massage = new String(ReceiveData.getData());
//创建一个String对象用来发送接受数据的大写
String sendMassage = massage.toUpperCase();
//发送数据转换数组
byte[] bySend = sendMassage.getBytes();
//创建一个DatagramPacket用来封装将要发送的指针数组
DatagramPacket SendData = new DatagramPacket(bySend, bySend.length, ReceiveData.getAddress(), ReceiveData.getPort());
//发送
serverSocket.send(SendData);
}
}
}
TCP套接字
实现一个简单的消息回显
客户端:
package TCPTest;
import javax.xml.crypto.Data;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPClient {
public static void main(String[] args)throws IOException {
//设置服务器地址为本地地址,端口号为12000
InetAddress serverName = InetAddress.getLocalHost();
int serverPort = 12000;
//创建一个clientSocket发起连接
Socket clientSocket = new Socket(serverName, serverPort);
//获取套接字的输出流
OutputStream outputStream = clientSocket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
Scanner input = new Scanner(System.in);
String massage = input.next();
dataOutputStream.writeUTF(massage);
//获取套接字的输入流
InputStream inputStream = clientSocket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
System.out.println("发送的消息为:" + dataInputStream.readUTF());
//关闭连接
clientSocket.close();
}
}
服务端:
package TCPTest;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建一个serverSocket,绑定端口12000
int serverPort = 12000;
ServerSocket serverSocket = new ServerSocket(serverPort);
System.out.println("服务器已启动,等待连接:");
//接收客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功:" + socket.getInetAddress() + " " + socket.getPort());
//创建inputStream获取客户端发送来的输入流
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
String massage = dataInputStream.readUTF();
System.out.println(massage);
//创建OutputStream获取输出流
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(massage);
//关闭连接
socket.close();
}
}