java通信之Socket通信基础
Java  /  管理员 发布于 2年前   181
正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个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...");//②监听SocketSocket socket = server.accept();//③IO流BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));String client = null;//如果接收到客户端的exit信号则关闭Socketwhile(!"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则关闭Socketwhile(!"exit".equalsIgnoreCase(server = brConsole.readLine())){pw.println(server);pw.flush();System.out.println("from server say:"+br.readLine());}//当用户输入exit时,把exit信息发送给服务器,服务器关闭当前Socketpw.println(server);pw.flush();pw.close();brConsole.close();br.close();socket.close();}}
需要注意的是:
测试时,首先启动服务器,然后启动客户端即可;
使用PrintWriter写数据的时候务必使用println,因为对方使用BufferReader的readline来取数据,如果使用print则BufferReader读取不到数据。
这只是基础实例,不支持并发。
博主 在
centos7中Meili Search搜索引擎安装流程步骤中评论 @鹿 执行以下命令看看你的2.27版本是否存在strin..鹿 在
centos7中Meili Search搜索引擎安装流程步骤中评论 这是我的错误提示,下载了对应的glibc-2.25.tar.gz后续按照教程操作..阿凡达123 在
golang 怎么做热更新中评论 也可以看看这个:https://github.com/edwingeng/hot..博主 在
hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..GGGGGGGGG 在
layui框架常用输入框介绍中评论 写的很好解决问题..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号