Java Socket编程简单案例【TCP与UDP】
1.TCP
服务器端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
// 1.服务器建立通信ServerSocket
ServerSocket ss = new ServerSocket(9999);
System.out.println("启动服务器....");
// 2.服务器建立Socket接收客户端连接
Socket s = ss.accept();
System.out.println("客户端:"+s.getInetAddress().getHostAddress() + "已连接到服务器");
// 3.建立IO输入流读取客户端发送的数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String mess = br.readLine();
System.out.println("客户端: " + mess);
// 4.建立IO输出流向客户端发送数据消息
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write( "【服务器端】发送消息\n");
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket通信,设置通信服务器的IP和Port
Socket socket = new Socket("127.0.0.1", 9999);
// 建立IO输出流向服务器发送数据消息
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 数据发送流,注意bw.write()中的数据要加 \n,否则Server会一直等待
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write("发送消息【客户端】\n");
bw.flush();
// 数据接收留
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String mess = br.readLine();
System.out.println("服务器: " + mess);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:【先运行服务器代码,然后运行客户端代码】
2.UDP
服务器端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServer {
public static void main(String[] args) {
try {
// 创建要接收的报文的存储对象
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
// 创建服务器端socket
DatagramSocket socket = new DatagramSocket(9991);
System.out.println("udp server 启动...");
// 接收消息,如果未收到消息会一直阻塞
socket.receive(packet);
String mess = new String(packet.getData(), 0, packet.getLength());
System.out.println(packet.getLength());
System.out.println(mess);
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端:
import java.io.IOException;
import java.net.*;
public class UdpClient {
public static void main(String[] args) {
String mess = "udp message from client";
try {
// 获取IP地址对象
InetAddress address = InetAddress.getByName("127.0.0.1");
// 创建packet包对象,封装要发送的包数据和服务器地址和端口号
DatagramPacket packet = new DatagramPacket(mess.getBytes(), mess.getBytes().length, address, 9991);
// 创建socket对象
DatagramSocket socket = new DatagramSocket();
// 发送数据
socket.send(packet);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}