Java中使用Socket实现服务器端和客户端通讯

创建服务器端serverSocket

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStream;
 6 import java.io.PrintWriter;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 
10 /**
11  * 服务端
12  * @author Administrator
13  *
14  */
15 public class Server {
16 
17     public static void main(String[] args) throws IOException {
18         //创建一个服务器端socket,指定绑定的端口号,并监听此端口
19         ServerSocket serverSocket = new ServerSocket(8888);
20         //调用accept()方法开始监听,等待客户端的连接
21         System.out.println("**********服务器即将启动,等待客户端的连接*************");
22         Socket socket = serverSocket.accept();
23         //获取输入流,并读取客户端信息
24         InputStream inp = socket.getInputStream();
25         //把字节流转换成字符流
26         InputStreamReader isr = new InputStreamReader(inp);
27         //为字符流增加缓冲区
28         BufferedReader bfr = new BufferedReader(isr);
29         String info = null;
30         while((info=bfr.readLine())!=null){//循环读取数据
31             System.out.println("我是服务器,客户端说:"+info);
32         }
33         socket.shutdownInput();//关闭输入流
34         //向客户端传递的信息
35         OutputStream ots = socket.getOutputStream();
36         PrintWriter pw = new PrintWriter(ots);
37         pw.write("欢迎登陆");
38         pw.flush();
39         
40         //关闭资源
41         pw.close();
42         ots.close();
43         bfr.close();
44         isr.close();
45         inp.close();
46         socket.close();
47         serverSocket.close();
48         
49     }
50     
51 }

创建客户端socket

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStream;
 6 import java.io.PrintWriter;
 7 import java.net.Socket;
 8 import java.net.UnknownHostException;
 9 
10 /**
11  * 客户端
12  * @author Administrator
13  *
14  */
15 public class Client {
16 
17     public static void main(String[] args) {
18         try {
19             //创建一个客户端socket
20             Socket socket = new Socket("localhost",8888);
21             //向服务器端传递信息
22             OutputStream ots = socket.getOutputStream();
23             PrintWriter pw = new PrintWriter(ots);
24             pw.write("用户名:admin;密码:123");
25             pw.flush();
26             //关闭输出流
27             socket.shutdownOutput();
28             //获取服务器端传递的数据
29             InputStream is = socket.getInputStream();
30             InputStreamReader isr = new InputStreamReader(is);
31             BufferedReader br = new BufferedReader(isr);
32             String info = null;
33             while((info=br.readLine())!=null){
34                 System.out.println("我是客户端,服务器说:"+info);
35             }
36             //关闭资源
37             br.close();
38             isr.close();
39             is.close();
40             pw.close();
41             ots.close();
42             socket.close();
43         } catch (UnknownHostException e) {
44             e.printStackTrace();
45         } catch (IOException e) {
46             e.printStackTrace();
47         }
48     }
49     
50 }

先启动服务器端,再启动客户端

服务器端打印结果为

**********服务器即将启动,等待客户端的连接*************
我是服务器,客户端说:用户名:admin;密码:123

客户端打印结果

我是客户端,服务器说:欢迎登陆

 

转载于:https://www.cnblogs.com/jpwz/p/5695093.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改telnet提示并非_俊翔:修改ECU数据解除奔驰GL350尿素限制

为达到排放要求,很多乘用柴油车都要加尿素(Adblue),以降低废气排放。在轿车维修当中,最常见的有奔驰GL350、路虎揽胜出现尿素锁定。仪表上提示加尿素,并且限制启动次数。每当把发动机熄火再启动一次,次数就会减少&…

JavaScript测验——变量名大小写---第6关

校验规则 例如: var userName; var userLoginFlag;闯关: 修改已声明的变量,让它们的命名符合驼峰命名法的规范。 这个需要注意的是在声明和赋值时都应该使用驼峰命名法。

python编码规范

python编码规范 文件及目录规范 文件保存为 utf-8 格式。程序首行必须为编码声明:# -*- coding:utf-8 -*-文件名全部小写。代码风格 空格 设置用空格符替换TAB符。代码缩进为4个空格符。仅在运算符前后(如,-,,)各加一个空格,不要在…

redux异步action_React躬行记(12)——Redux中间件

Redux的中间件(Middleware)遵循了即插即用的设计思想,出现在Action到达Reducer之前(如图10所示)的位置。中间件是一个固定模式的独立函数,当把多个中间件像管道那样串联在一起时,前一个中间件不…

java方法示例注释 @_Java注释和真实世界的Spring示例

java方法示例注释 “注释”是编程语言定义的一种,并用作“标记”。 可以将它们视为编程语言引擎可以理解的注释行。 它们不会直接影响程序的执行,但会直接影响程序的执行。 定义 注释使用interface关键字定义,并且与接口相似。 它具有定义类…

监控与管理

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适…

郑州智慧岛大数据管委会_数据科学融通应用数学 ‖ 智慧岛大讲堂

8月6日上午,郑东新区智慧岛大数据实验区管委会,举办了“数据科学融通应用数学”专题智慧岛大讲堂讲座,邀请到北京大学数学科学学院副教授、大数据分析与应用技术国家工程实验室郑州数字创新中心主任卢朓为本次大讲堂活动做主题分享&#xff0…

浏览器中的WebSocket(ws://127.0.0.1:9988);

<script type"text/javascript">function WebSocketTest(){if ("WebSocket" in window){alert("您的浏览器支持 WebSocket!");// 打开一个 web socketvar ws new WebSocket("ws://localhost:9998/echo");ws.onopen function()…

db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用

存储过程小例子如完成以下事情&#xff0c;获得与之前一样的订单合计&#xff0c;但需要对合计增加营业税&#xff0c;不过只针对某些顾客主要就是&#xff1a;1、获得合计2、把营业税有条件的添加到合计 3、返回合计&#xff08;带或不带税&#xff09;delimiter $$-- 存储过程…

hdu_5761_Rower Bo(xjb猜公式)

题目链接&#xff1a;hdu_5761_Rower Bo 题意&#xff1a; 让你求一个物理问题 题解&#xff1a; xjb猜公式&#xff0c;由题目样例可得&#xff0c;答案为8/7&#xff0c;然后我们可以xjb猜出公式为v1*a/(v1*v1-v2*v2)&#xff0c;然后特判一下a0和v1<v2的情况就OK 1 #incl…

netbeans 源文件_具有NetBeans,嵌入式GlassFish,JPA和MySQL数据源的Arquillian

netbeans 源文件这是一个偶然的帖子。 我一直在研究交易CDI观察者&#xff0c;并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是&#xff0c;这种方法不能很好地工作&#xff0c;我仍在弄清楚&#xff0c;使用普通的嵌入式GlassFish时问题出在哪里。 同时&am…

vue 子父组件周期顺序_父组件和子组件生命周期钩子执行顺序是什么?

加载页面执行步骤1、父组件&#xff1a;beforeCreate -> created -> beforeMount2、子组件&#xff1a;beforeCreate -> created -> beforeMount -> mounted3、父组件&#xff1a;mounted销毁组件执行步骤1、父组件&#xff1a;beforeDestroy2、子组件&#xff…

最大和

【题目描述】N个数围成一圈&#xff0c;要求从中选择若干个连续的数&#xff08;注意每个数最多只能选一次&#xff09;加起来&#xff0c;问能形成的最大的和。 【输入描述】第一行输入N&#xff0c;表示数字的个数&#xff0c;第二行输入这N个数字。 【输出描述】输出最大和。…

某个元素的距离页面的左边距_在机检测圆心距

点击蓝色标题关注&#xff01;新年伊始&#xff0c;小伙伴们开工了&#xff0c;小编也来给大家加油助威。精密加工过程中&#xff0c;需要严格管控每道工序的加工误差&#xff0c;保证零件最终加工合格。那么该如何快速而又准确地判断&#xff0c;当前工序加工尺寸是否合格&…

复合设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …