大家好,感谢邀请,今天来为大家分享一下套接字通信的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
应用:QQ、游戏、硬件交互
有两种通信方式:tcp(面向流的通信)udp(数据报通信)
端口:数据进出的门
系统开发到应用层:1000-9999
TCP协议下的流式通信
服务器思路:
1 建立渠道
ServerSocket 服务器=new ServerSocket(端口);
2 等待客户端发送请求
套接字客户端=服务器.accept();
3 收到请求后读取消息
BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String xx=reader.readLine();
4 向对方发送消息
PrintWriter print=new PrintWriter(socket.getOutputStream());
print.println(要发送的消息);
print.flush();
5 关闭流和通道
客户想法:
1 与服务器建立连接
Socket sock=new Socket(服务器ip地址,端口);
2 向对方发送消息
PrintWriter print=new PrintWriter(socket.getOutputStream());
print.println(要发送的消息);
print.flush();
3.接收对方消息
BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String xx=reader.readLine();
4 关闭流和通道
1 网络通信的目的和特点
2socket通信的两种形式
1 tcp/ip —多线程组合
2udp
3 URL编程URI
1 网络通信的目的和特点
1 点对点通信(地址)
2 使用聊天四人游戏两人游戏
硬件交互(智能家电、电器远程控制)
端口:1~65535
软件:1000~9999
TCP/IP协议通信流程
一台服务器:
1 ServerSocket 服务器=new ServerSocket(5000);
2 等待别人连接到我Socket client=server.accept()
3 阅读消息
InputStream is=client.getInputStream();
BufferedReader reader=new BufferedReader( new InputStreamReader(is));
reader.readLine();
4 发送消息
OutputStream os=clinet.getOutputStream();
PrinterWriter ww=new PrinterWriter(os);
ww.println(‘xxx’);
ww.flush();
5: 关闭相关资源
流动
走道
服务器
两个客户,
1 套接字cok=new Socket(‘127.0.0.1’,5000);
2 发送消息
OutputStream os=cok.getOutputStream();
PrinterWriter ww=new PrinterWriter(os);
ww.println(‘xxx’);
3 阅读消息
InputStream is=cok.getInputStream();
BufferedReader reader=new BufferedReader( new InputStreamReader(is));
reader.readLine();
5: 关闭相关资源
流动
走道
交流内容:
读取和写入对象:
序列化:ObjectInputStream/ObjectOutputStream
用户信息可序列化
ObjectOutputStream xx=新ObjectOutputStream(新FileOutputStream(D:/xxxxs))
xx.writeObject(用户信息)
套接字通信
1BufferedReader PrintWriter发送短信
2 ObjectInputStream/ObjectOutputStream对象通信
3 FileInputStream/FileOutputStream 图片
4 多线程
服务器端–》socket–读写消息
—》socket–读写消息
—》socket–读写消息
多线程
UDP的特点:无需建立通道,部分客户端和服务器,效率高,但不安全
DatagrameSocket 对象用于发送和接收数据报
数据报包数据
tcp特性:需要建立连接、关闭连接、
安全稳定但效率较低
接收消息的流程:
1 DatagrameSocket ds=new DatagrameSocket(5000);
2
byte[] arr=新字节[1024];
DatagramePacket packet=new DatagramePacket(arr,arr.length);
ds.接收器(数据包);
3 次浏览
String str=new String(packet.getDatas(),0,packet.getDatas().length)
发送消息:
1 DatagrameSocket ds=new DatagrameSocket();
2 DatagramePacket packet=new DatagramePacket(数据字节[],数据长度,ip地址InetAddress,端口);
ds.send(数据包);
协议:
tcp/ip: 应用层(http ftp) 传输层(tcp udp) 网络层(ip) 数据链路层(link)
tcp: 建立连接关闭连接效率低安全可靠
udp:不需要建立连接,效率高且不安全
InetAddress对象网络地址对象域名/ip地址
InetAddress add=InetAddress.getByName(‘www.baidu.com’);
add.getHostName();
add.getHostAddress();
InetAddress add=InetAddress.getLocalHost();
端口:1~65532
UDP通信:
发送消息
DatagrameSocket sock=new DatagrameSocket();
DatagramePacket pack=new DatagramePacket(消息字节数组、消息长度、InetAddress对象、端口);
袜子.发送(包);
接收消息
DatagrameSocket sock=new DatagrameSocket(端口);
字节[] arr=新字节[100]
DatagramePacket pack=new DatagramePacket(arr,arr.length);
袜子.接收器(包)
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/116611.html
用户评论
我一个人
socket通信真心比直接调用库的方法简单多了,感觉自己掌握了好东西!
有8位网友表示赞同!
发呆
我一直觉得socket通信太复杂了,今天看这篇文章好像明白了点什么,我是不是该再去翻翻网络编程的书?
有19位网友表示赞同!
孤岛晴空
虽然现在有现成的RPC框架可以用,但还是得了解socket通信基础原理,毕竟深入理解才是真懂!
有7位网友表示赞同!
请在乎我1秒
socket 通信真的很强大。可以连接不同的系统和程序,想玩什么就有什么玩法的感觉
有11位网友表示赞同!
你是梦遥不可及
文章写的不错,通俗易懂,刚开始学习网络编程的人看了应该能快速入门socket通信哦!
有16位网友表示赞同!
煮酒
我一直在用socket通信开发游戏服务器,感觉真的不容易啊!调试起来很头疼,需要花很多时间和精力。 不过掌握了socket通信的技巧后,开发效率确实会提高一大截!
有6位网友表示赞同!
苏樱凉
学习socket通信太难了,各种复杂的协议和包,我整个人都要崩溃!感觉这就像个谜题,永远解不开的感觉。
有13位网友表示赞同!
坏小子不坏
socket 通信虽然强大,但安全性方面还是需要注意的,一定要做好数据加密和安全验证。毕竟网络里到处是潜在的安全威胁
有14位网友表示赞同!
志平
我之前也写过一些socket通信的代码,发现其实很容易出错,各种连接超时、断线等等问题,真是让人头疼! 感觉这篇文章很有用的知识点!
有10位网友表示赞同!
冷风谷离殇
socket 通信真的太香了! 可以开发多么酷炫的小应用啊! 我想去做个客户端和服务器互相通讯的小游戏!
有8位网友表示赞同!
莫阑珊
这篇文章讲解socket通信的原理很到位,让我对这个话题有了更深入的理解。真是太感谢作者分享这么宝贵的信息了!
有11位网友表示赞同!
恰十年
socket 通信虽然复杂,但确实非常强大,可以实现很多有趣的项目,比如聊天软件、文件传输等等。我准备尝试一下,看看能不能开发一个简单的项目来学习实践。
有17位网友表示赞同!
七级床震
socket通信这种底层技术 really 增强了我对网络编程的理解! 感觉学到了一个宝贵的技能!
有6位网友表示赞同!
醉红颜
这篇文章很适合初学者阅读, 讲解清晰易懂,入门非常便捷。 我现在开始尝试学习socket通信了,希望能够早日掌握这项技能!
有20位网友表示赞同!
素衣青丝
我曾经尝试过用socket通信开发一个聊天软件, 但是遇到了很多问题,调试起来非常困难,最后还是放弃了。 看这篇文章,感觉自己确实缺少经验和技巧, 估计还需要多加练习!
有7位网友表示赞同!
迁心
socket 通信的应用场景真的很多! 学习这个知识点 对从事网络编程相关工作的人来说是非常有用的!
有15位网友表示赞同!
生命一旅程
本以为socket通信会非常复杂,没想到这篇文章讲解得非常通俗易懂,让我初步了解了它的原理和使用方法。
有20位网友表示赞同!
执妄
Socket 通信 确实是一个很有特色的技术, 可以让你体验到网络编程的魅力! 我很想学习它!
有14位网友表示赞同!