网络通信_socket
socket又称套接字
使用server实现循环通信 代码如下
import socket
server = socket.socket()
server.bind(('192.168.16.33',))
server.listen()
while :
coon,addr = server.accept()
while :
ret = coon.recv().decode('utf-8')
print(ret)
msg = input('内容:').encode('utf-8')
coon.send(msg)
coon.close() server.close()
客户端如下
import socket
client = socket.socket()
client.connect(('192.168.16.33',))
while :
msg = input('>>>')
client.send(msg.encode('utf-8'))
ret = client.recv().decode('utf-8')
print(ret)
client.close()
使用socketserver可以实现并发通信
import socketserver
class MY_server(socketserver.BaseRequestHandler):
def handle(self):
ret = self.request.recv().decode('utf-8')
print(ret) if __name__ == '__main__':
ip = ('127.0.0.1',)
server = socketserver.ThreadingTCPServer(ip,MY_server)
使用socket实现通信效果很容易造成黏包现象
产生黏包现象需要用struct和josn序列化的方式来解决,
import struct
import subprocess
import socket
server = socket.socket()
server.bind(('127.0.0.1',))
server.listen()
coon,addr = server.accept()
cmd = coon.recv().decode('utf-8')
print(cmd)
obj = subprocess.Popen(cmd,shell= True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
right_obj = obj.stdout.read()
error_obj = obj.stderr.read()
date_beyes = len(right_obj + error_obj)
print(date_beyes)
struct_date_beyes = struct.pack('i',date_beyes)
print(struct_date_beyes)
coon.send(struct_date_beyes)
coon.send(right_obj +error_obj)
import socket
import struct
client = socket.socket()
client.connect(('127.0.0.1',))
cmd = input('>>>').encode('utf-8')
client.send(cmd)
beyes_struct_len = client.recv()
print(beyes_struct_len)
beyes_struct_ = struct.unpack('i',beyes_struct_len)[]
date = b''
while len(date) < beyes_struct_:
form_date = client.recv()
date += form_date
print(date.decode('gbk'))
上图是解决黏包现象的客户端和服务端代码
网络通信_socket的更多相关文章
- ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信
本文内容摘要:1)安装zeromq.2)实例说明使用zmq进行网络间的消息发送和接收 首先在机器中安装zmq库 步骤如下: 1)下载zeromq的源代码,ZeroMQ的官方网址:http://zero ...
- 基础笔记12(socket,url网络通信)
进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...
- Windows Store App 网络通信 HttpWebRequest
如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...
- socket网络通信
1.socket通常也称作"套接字",用于描述IP地址和端口.在internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个socket,并绑定到一个端口上 ...
- 20145316&20145229实验五:网络通信
20145316&20145229实验五:网络通信 结对伙伴:20145316 博客链接:http://www.cnblogs.com/xxy745214935/p/6130897.html
- 网络通信之Socket与LocalSocket的比较
Socket与LocalSocket都可以实现网络通信,两个有什么区别呢? LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界. 于是,思考到一个问题:a ...
- Android 网络通信API的选择和实现实例
Android开发网络通信一开始的时候使用的是AsyncTask封装HttpClient,没有使用原生的HttpURLConnection就跳到了Volley,随着OkHttp的流行又开始迁移到OkH ...
- java 25 - 2 网络编程之 网络通信三要素
网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通 ...
- TCP/UDP,SOCKET网络通信,C++/Java实现
趁这两天没事干,就把网络通信这一块搞一搞,C/S方面的了解一下,很重要! TCP Server/Client
随机推荐
- vue 字符串长度控制显示的字数超出显示省略号
1. html <p class="index__Feature-list-itemlist-title newline"> {{item.name| ellipsis ...
- 【学习笔记】圆方树(CF487E Tourists)
终于学了圆方树啦~\(≧▽≦)/~ 感谢y_immortal学长的博客和帮助 把他的博客挂在这里~ 点我传送到巨佬的博客QwQ! 首先我们来介绍一下圆方树能干什么呢qwq 1.将图上问题简化到树上问题 ...
- Hadoop搭建完全分布式
ubuntu系统下: https://blog.csdn.net/u014636511/article/details/80171002 centos系统下: https://blog.csdn.ne ...
- cmd美化
原本的cmd 虽然原本的cmd很简约黑底白字,但是看久了也会视觉疲劳 美化(丑化) 打开cmd右键头部选择属性 字体选项这里可以修改字体的大小和选择字体,修改之后下方会有预览,颜色选项这里点选屏幕文字 ...
- 简单使用vuex状态管理
1.在使用vue-cli脚手架创建项目后 npm install vuex 2.创建store文件夹,结构如下: 3.store中 index.js代码如下: 4.入口文件main.js中引入stor ...
- C/C++ C++ 11 兰姆达
{ auto layer = Layer::create(); auto event = cocos2d::EventListenerTouchOneByOne::create(); ev ...
- logstash配置文件详解
logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter. 从input读取事件源,(经过filter解析和处理之后),从output输出到目标 ...
- BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...
- pytest_用例运行级别_模块级
''' pytest 参数说明 https://www.jianshu.com/p/7a7432340f02 -x test_fixt_model.py 遇到错误时,停止运行 用-v运行(-v显示运行 ...
- java并发编程笔记(九)——多线程并发最佳实践
java并发编程笔记(九)--多线程并发最佳实践 使用本地变量 使用不可变类 最小化锁的作用域范围 使用线程池Executor,而不是直接new Thread执行 宁可使用同步也不要使用线程的wait ...