网易首页 > 网易号 > 正文 申请入驻

Socket最简单的客户端与服务端通信-Java

0
分享至

因为最近项目中要接入某通信协议接口,基于TCP/IP的socket接口。于是就在本地弄一个最简单的Socket 通信仅供学习。话不多说,直接开摆

socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。socket如何实现通信

客户端代码

package test;
import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
//java基础类方法的入口
public static void main(String[] args)throws IOException {
Socket socket=new Socket();
//读取流超时的时间设置为3000
socket.setSoTimeout(3000);
//连接本地,端口2000;超时时间3000ms
socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000),3000);
System.out.println("发起服务器连接---------");
System.out.println("客户端信息:"+socket.getLocalAddress()+" P:"+socket.getLocalPort());//打印本地服务器地址和本地端口号
System.out.println("服务端信息:"+socket.getInetAddress()+" P:"+socket.getPort());
try{
//发送接收数据
todo(socket);
}catch (Exception e){
System.out.println("出现异常关闭啦");
}
//释放资源
socket.close();
System.out.println("再见,客户端已退出");
}
//发送数据的方法
private static void todo(Socket client) throws IOException{
//构建键盘输入流
InputStream in=System.in;
//把键盘输入流转换为BufferedReader
BufferedReader input=new BufferedReader(new InputStreamReader(in,"UTF-8"));
//得到Socket输出流(Client要发送出去给服务器的信息),并转换为打印流
OutputStream outputStream = client.getOutputStream();
PrintStream socketPrintStream=new PrintStream(outputStream);
//得到Socket输入流(Server回复传入Client的信息),并转换为BufferedReader
InputStream inputStream = client.getInputStream();
BufferedReader socketBufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
//判断Server是否想要退出,回复“bye”时是他想要结束对话
boolean flag=true;
do {
//键盘读取一行
String str = input.readLine();
//发送到服务器,(通俗就是显示在输入处,在键盘上输入什么,屏幕显示什么)
//String str = "003099999920220614100000M1S1C0x0a";
socketPrintStream.println(str);
//从服务器读取一行,即Server传入回复给Client的信息
String echo = socketBufferedReader.readLine();
if("bye".equalsIgnoreCase(echo)){
flag=false;
} else{
//打印到屏幕上,Server回复什么就显示什么
System.out.println("客户端回复:"+echo);
}
}while(flag);
//资源释放,关闭对于socket资源
socketPrintStream.close();
socketBufferedReader.close();
}
}

服务端代码

package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws IOException {
ServerSocket server=new ServerSocket(2000);
System.out.println("服务器准备就绪----------");
System.out.println("服务器信息:"+server.getInetAddress()+" P:"+server.getLocalPort());
//等待多个客户端连接,循环异步线程
for(;;) {
//得到客户端
Socket client = server.accept();
//客户端构建异步线程
ClientHandler clientHandler = new ClientHandler(client);
//启动线程
clientHandler.start();
}
}
/**
* 客户端消息处理
*/
//多个客户端需要做异步操作,建立异步处理类
private static class ClientHandler extends Thread{//线程
private Socket socket;//代表当前的一个连接
private boolean flag=true;
ClientHandler(Socket socket){
this.socket=socket;
}//构造方法
//一旦Thead启动起来,就会运行run方法,代表线程启动的部分
@Override
public void run(){
super.run();
//打印客户端的信息
System.out.println("新客户端发起连接:"+socket.getInetAddress()+" P:"+socket.getPort());
//在发送过程中会触发一个IO过程,所以需要捕获异常
try {
//得到打印流,用于数据输出,服务器回送数据使用,即在屏幕上显示Server要回复Client的信息
PrintStream socketOutput=new PrintStream(socket.getOutputStream());
//得到输入流,用于接收数据,得到Client回复服务器的信息
BufferedReader sockeInput=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
do {
//客户端回复一条数据
String str = sockeInput.readLine();
if("bye".equalsIgnoreCase(str)){
flag=false;
//回送
socketOutput.println("bye");
}else{
//打印到屏幕,并回送数据长度
System.out.println(str);
socketOutput.println("Server回答说:" +str.length());
}
}while(flag);
sockeInput.close();
socketOutput.close();
}catch (Exception e){
//触发异常时打印一个异常信息
System.out.println("连接异常断开!!!");
}finally {
//连接关闭
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("再见,客户端退出:"+socket.getInetAddress()+" P:"+socket.getPort());
}
}
}

然后先运行服务端类Server.java,然后再运行Client.java
在客户端控制台输入任意文字,按下回车键即可。

  • 原文来自:https://blog.51cto.com/u_15305048/5394696
  • 本文地址:https://www.linuxprobe.com/java-socket-server-client.html编辑:张雄,审核员:逄增宝
  • Linux命令大全:https://www.linuxcool.com/
  • Linux系统大全:https://www.linuxdown.com/
  • 红帽认证RHCE考试心得:https://www.rhce.net/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
怪不得街上很少遇见女流浪汉!网友评论区揭露了社会的残酷真相

怪不得街上很少遇见女流浪汉!网友评论区揭露了社会的残酷真相

有趣的羊驼
2024-06-07 16:04:43
“台湾永远都不会是中国的一部分”,讲出这句话的人,被全网唾骂

“台湾永远都不会是中国的一部分”,讲出这句话的人,被全网唾骂

忠于法纪
2024-06-07 17:55:19
文明生变!乌总统反停战演讲:白俄全民可收听,俄剑指武器输古巴

文明生变!乌总统反停战演讲:白俄全民可收听,俄剑指武器输古巴

大风文字
2024-06-08 10:02:20
广州保利东漖N上地块项目坍塌事故查明,致2死,3人被追究刑责

广州保利东漖N上地块项目坍塌事故查明,致2死,3人被追究刑责

中国基建报
2024-06-07 19:24:23
有专家预测,未来两年,大概率会出现如下十二种情况!

有专家预测,未来两年,大概率会出现如下十二种情况!

叒女紫121
2024-06-08 16:26:38
现场惨烈,1万乌军遭屠杀殆尽,法国顾问被俘,战场出现重大转变

现场惨烈,1万乌军遭屠杀殆尽,法国顾问被俘,战场出现重大转变

秦蓁
2024-06-08 12:00:07
自立门户?西媒:两队关注小安切洛蒂,但他无意今年离开

自立门户?西媒:两队关注小安切洛蒂,但他无意今年离开

懂球帝
2024-06-08 16:48:27
上游人物 | 梁实的第28次高考

上游人物 | 梁实的第28次高考

上游新闻
2024-06-07 09:04:32
后续!无锡75克黄金变37克:判定为诈骗,商家被采取强制措施!

后续!无锡75克黄金变37克:判定为诈骗,商家被采取强制措施!

棒棒糖画画
2024-06-07 23:23:17
队报:巴黎告诉队内三名门将,他们不再有1号、2号、3号门将之分

队报:巴黎告诉队内三名门将,他们不再有1号、2号、3号门将之分

直播吧
2024-06-08 10:02:16
伊能静儿子火出圈!和宋佳同框走秀,一举动成功抢镜,注定不平庸

伊能静儿子火出圈!和宋佳同框走秀,一举动成功抢镜,注定不平庸

麦香娱综艺
2024-06-08 12:59:40
收受红包200多次、单次金额不大……县政协原主席钱权交易细节披露

收受红包200多次、单次金额不大……县政协原主席钱权交易细节披露

极目新闻
2024-06-07 20:22:38
中央确定辽宁省8个中等城市:盘锦第2,阜新第5,朝阳入围

中央确定辽宁省8个中等城市:盘锦第2,阜新第5,朝阳入围

鬼菜生活
2024-06-08 07:55:02
国产车太差劲,奉劝大家,买20万以上的车型,千万不要选择国产车!

国产车太差劲,奉劝大家,买20万以上的车型,千万不要选择国产车!

看看娱乐与体育
2024-06-08 07:55:02
曾经的第3大芯片架构终止,曾被认为是国产CPU崛起的希望

曾经的第3大芯片架构终止,曾被认为是国产CPU崛起的希望

原广工业
2024-06-07 07:15:02
柳叶刀点名批评中国饮食,一日三餐都是碳水,升糖指数全球最高

柳叶刀点名批评中国饮食,一日三餐都是碳水,升糖指数全球最高

芝士圈
2024-06-02 14:09:50
76年吴忠严肃告知苏振华:除了华主席和叶帅,谁也不能从我这调兵

76年吴忠严肃告知苏振华:除了华主席和叶帅,谁也不能从我这调兵

史源历史专栏
2024-06-07 10:54:52
男性要注意了!这个部位的毛发变白,证明寿命在逐渐减少

男性要注意了!这个部位的毛发变白,证明寿命在逐渐减少

慎独赢
2024-06-07 01:24:33
留学生的父母精神状态有多荒谬?网友分享让我目瞪口呆,笑死我了

留学生的父母精神状态有多荒谬?网友分享让我目瞪口呆,笑死我了

有趣的羊驼
2024-06-07 16:02:37
韩国网友也来上分?学习铁头在神社搞事情,被韩国人禁止入内

韩国网友也来上分?学习铁头在神社搞事情,被韩国人禁止入内

辣条小剧场
2024-06-08 08:30:03
2024-06-08 17:18:44
孙有匪
孙有匪
科技
1595文章数 2009关注度
往期回顾 全部

科技要闻

今年数学到底有多难?大模型:我也不太会

头条要闻

男子为证明"男子气概"赴边疆当兵 退役后成广绣绣郞

头条要闻

男子为证明"男子气概"赴边疆当兵 退役后成广绣绣郞

体育要闻

她拯救了WNBA,却为何被疯狂针对?

娱乐要闻

汤唯抵达巴黎将担任奥运火炬手

财经要闻

重磅详解:为什么美国经济还没有衰退?

汽车要闻

上汽大通大家9售26.99万起 综合续航1300km+

态度原创

游戏
本地
时尚
教育
公开课

钢岚:专武宠儿威廉抽取价值分析!官方终于在半周年庆放大招了!

本地新闻

我和我的家乡|踏浪营口,心动不止一夏!

40岁才不要穿“阿姨装”,跟着这些女神穿,老了也是一枝花

教育要闻

高考后家长应警惕这4类骗局

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版