在实现网络通信前,要先要了解socket
在Java中,Socket是一种网络通信的基本组件,用于建立网络连接和进行数据传输。Socket实现了网络中两个应用程序之间的通信,它是一个端点,包含了一个IP地址和一个端口号,可以通过Socket连接到网络中的其他Socket端点。
在Java中,Socket被实现为两个类:ServerSocket和Socket。ServerSocket类用于创建服务器端的Socket,监听指定的端口并等待客户端连接。一旦客户端连接到服务器端的Socket,服务器端将为该连接创建一个新的Socket对象,并通过这个Socket与客户端进行通信。
而客户端使用Socket类来连接服务器端的Socket,并进行数据传输。当客户端连接到服务器端的Socket后,客户端就可以使用Socket对象的输入和输出流来发送和接收数据。
Java的Socket类提供了一些方法,例如accept()、getInputStream()、getOutputStream()等,用于建立连接、接收和发送数据等操作。Socket类还支持多线程编程,可以通过多线程来实现同时处理多个连接的需求。
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(58888);
//绑定端口,使服务器与特定端口绑定,建议50000以上
System.out.println("ServerSocket初始化完成"+serverSocket.getInetAddress()+"");
//getInetAddress方法获取主机ip地址
// 监听socket,当有socket连接,创建socket对象接收或发送数据
Socket socket = serverSocket.accept();
System.out.println("监听到连接的ip地址:"+socket.getInetAddress());
//打印出连接的地址
System.out.println("监听到连接的端口"+socket.getPort());
//打印出连接的端口
//服务端发送数据,创建输出流
OutputStream outputStream = socket.getOutputStream();
//发送数字6303003
//由于只能发送byte类型,所以要将int类型转换成byte,String类型转换成byte
System.out.println("发送66303003");
int num = 66303003;
int b1 = (num >> 24) & 0xFF;
int b2 = (num >> 16) & 0xFF;
int b3 = (num >> 8) & 0xFF;
int b4 = (num >> 0) & 0xFF;
outputStream.write (b1);
outputStream.write (b2);
outputStream.write (b3);
outputStream.write (b4);
System.out.println("发送"+b1+" "+b2+" "+b3+" "+b4);
System.out.println("发送你好");
String msg = "你好";
for(int i = 0; i < msg.length (); i++){
char c = msg.charAt (i);
int c1 = (c >> 8) & 0xFF;
int c2 = (c >> 0) & 0xFF;
outputStream.write (c1);
outputStream.write (c2);
}
outputStream.flush();
//强制输出输出流
//关闭进程
outputStream.close();
socket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
//创建客户端ip地址,端口号
Socket socket = new Socket("127.0.0.1",58888);
System.out.println("客户端连接IP:"+socket.getLocalAddress()+"本地端口"+socket.getLocalPort());
System.out.println("连接的服务端IP:"+socket.getInetAddress()+"对方端口"+socket.getPort());
InputStream inputStream = socket.getInputStream();
int b1 = inputStream.read ();
int b2 = inputStream.read ();
int b3 = inputStream.read ();
int b4 = inputStream.read ();
int msg = b1 << 24 | b2 << 16 | b3 << 8 | b4;
System.out.println(msg);
for(int i = 0; i < 4; i++){
int c1 = inputStream.read ();
int c2 = inputStream.read ();
int c = c1 << 8 | c2;
System.out.print ((char) c);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
2038

被折叠的 条评论
为什么被折叠?



