苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
使用Java Socket演示客户端与服务端的一问一答
苟哥
2019-12-27 AM
1770℃
0条
## 一、什么是套接字(socket) 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。 套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。 网络套接字是IP地址与端口的组合。 Socket是Java网络编程的基础,所以有必要了解它的原理及使用。这篇文章主要介绍如何使用java的socket接口演示客户端与服务端***一问一答***(注意不是自由沟通,自由沟通会在其他文章介绍)式的通信。 ## 二、实验步骤 使用socket完成客户端与服务端的通信,主要包含以下几个步骤: 1. 建立连接 1. 客户端发送消息 1. 服务端接收消息并回复客户端 1. 客户端接收服务端返回的消息 1. 重复1~4步骤 围绕上面几个步骤直接贴出代码,相关说明已经在代码注释中给出,很容易理解。服务端文件代码如下: ```java package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { static ServerSocket ss; static Socket s; static String receiveMsg = ""; static String sendMsg = ""; public static void main(String[] args) { try { //1、创建socket服务 ss = new ServerSocket(8888); System.out.println("服务已建立,等待客户端消息"); s = ss.accept(); //3、接收消息并回复客户端 singleThread(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 单线程 */ private static void singleThread() { try { while(receiveMsg != null){ receive(); } s.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 接收消息并回复 */ private static void receive() { try { //======================接收消息====================== // 打开客户端的输入流 InputStream is = s.getInputStream(); // 使用缓存流读出客户端过来的数据流 BufferedReader br = new BufferedReader(new InputStreamReader(is)); receiveMsg = br.readLine(); System.out.println("客户端说:" + receiveMsg); //======================回复========================= // 使用客户端socket对象的输出流给客户端返回数据 OutputStream os = s.getOutputStream(); // 使用缓存流写出数据 PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); humenResponse(); //人工回复 pw.println(sendMsg); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 人工客服回复 * * @throws IOException */ private static void humenResponse() throws IOException { BufferedReader brsi = new BufferedReader(new InputStreamReader(System.in)); sendMsg = brsi.readLine(); } } ``` 客户端文件代码如下: ```java package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class Client { static Socket s; static String receiveMsg = ""; static String sendMsg = ""; public static void main(String[] args) { try { //1、连接服务端 s = new Socket("127.0.0.1", 8888); //2、发送消息给服务端 singleThread(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 单线程处理 */ private static void singleThread() { try { System.out.println("已连接到服务端"); // 使用socket对象的输出流给服务端发送数据 OutputStream os = s.getOutputStream(); // 使用缓存流写出数据 PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); // 获取键盘录入,获取控制台用户输入的信息 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入:"); while ((sendMsg = br.readLine()) != null) { pw.println(sendMsg); pw.flush(); receive(); System.out.print("请输入:"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 4、接收服务端返回的信息 */ private static void receive() { try { // 打开输入流 InputStream is = s.getInputStream(); // 使用缓存流读出服务端返回的数据流 BufferedReader br_Server = new BufferedReader(new InputStreamReader(is)); receiveMsg = br_Server.readLine(); System.out.println("服务端说:" + receiveMsg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ``` ##三、运行测试 先运行服务端,再运行客户端。如果修改了代码,记得关闭服务,并重新建立连接。 笔者演示结果如下: ![socket客户端与服务端互撩.png](http://images.kuryun.com/blog/typecho/socket客户端与服务端互撩.png)
标签:
Java
,
socket
,
客户端与服务端通信
,
聊天机器人
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/59/
上一篇
找出一个文件夹下的最大和最小文件
下一篇
基于Swing的一对一聊天程序
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏