Pyhon创建TCP通讯

创建一个客户端和一个服务端通过TCP协议发送数据

服务端

import socket
import threading
import time

#  创建socket
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#  监听端口
#1024以下的端口是系统保留的,普通用户没有权限调用,1025-65535端口可以任意使用
soc.bind(('127.0.0.1', 1234))
# listen()方法开始监听端口,传入的参数指定等待连接的最大数量
soc.listen(5)
print('waiting for connection...')


def Tcplink(sock, addr):
    print('Accept new connection form %s:%s...' % addr)
    sock.send(b'Welcome!')
    while True:
    	#限定一次接受的数据是1024节
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Have Received: %s!' % data.decode('utf-8')).encode('utf-8'))
        #  sock.close()
        print('Connection from %s Received: %s  ' % addr, data)


while True:
    #  接受一个新连接:
    sock, addr = soc.accept()
    #  创建新线程来处理连接

    t = threading.Thread(target=Tcplink(sock, addr), args=(sock, addr))
    t.start()
    data = sock.recv(1024)
    time.sleep(1)
    if not data or data.decode('utf-8') == 'exit':
        break

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

客户端

'''
将命令发送给单片机,发给rov
'''
import socket
import time
import rov_control
from cmd_to_protocal import  ProtocalDataModel

#  创建客户端
import config
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#  连接
soc.connect('127.0.0.1',1234 )
print("等待连接.....")
#decode:将unicode 编码转换为其他编码格式
if soc.recv(1024).decode('utf-8')=='Welcome!':
    print('连接成功!请输入控制命令:')
distributeData = ProtocalDataModel()
while True:
    control_data = input()
    soc.send(control_data.encode())
    if control_data=='q':
        soc.send(b'exit')
        #  套字节关闭
        soc.close()
    time.sleep(0.5)
    print(soc.recv(1024).decode('utf-8'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值