java通信之Socket通信基础

xiaoxiao2021-03-01  36

正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤:

①创建Socket;

②打开连接到Socket的输入输出流;

④按照一定的协议对Socket进行读写操作;

④关闭Socket。

 

Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待socket连接,如果达成连接则开始执行输入输出操作,通过输入流获取客户端的请求信息,通过输出流返回客户端信息。客户端则只需创建一个Socket指定服务器的ip和端口号即可。

 

下面看服务器代码:

public class SocketServer { public static int port = 3333; public static String ip = "172.30.1.101"; public static void main(String[] args) throws IOException { //①启动服务器 ServerSocket server = new ServerSocket(port); System.out.println("server running..."); //②监听Socket Socket socket = server.accept(); //③IO流 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); String client = null; //如果接收到客户端的exit信号则关闭Socket while(!"exit".equalsIgnoreCase(client = br.readLine())){ System.out.println("from client say:"+client); pw.println("server get your info :" +client); pw.flush(); } br.close(); pw.close(); socket.close(); server.close(); } }

 

下面看客户端代码:

public class SocketClient { public static void main(String[] args) throws IOException { //连接服务器 Socket socket = new Socket(SocketServer.ip,SocketServer.port); System.out.println("client running..."); System.out.println("-----insert your info:"); //用户在控制台输入向服务器发送的信息 BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in)); //IO流 PrintWriter pw = new PrintWriter(socket.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String server = null; //如果用户输入exit则关闭Socket while(!"exit".equalsIgnoreCase(server = brConsole.readLine())){ pw.println(server); pw.flush(); System.out.println("from server say:"+br.readLine()); } //当用户输入exit时,把exit信息发送给服务器,服务器关闭当前Socket pw.println(server); pw.flush(); pw.close(); brConsole.close(); br.close(); socket.close(); } }

 

 

需要注意的是:

测试时,首先启动服务器,然后启动客户端即可;

使用PrintWriter写数据的时候务必使用println,因为对方使用BufferReader的readline来取数据,如果使用print则BufferReader读取不到数据。

这只是基础实例,不支持并发。

相关资源:网工数据通信基础
转载请注明原文地址: https://www.6miu.com/read-3650348.html

最新回复(0)