socket网络编程tcp

本文通过示例介绍了TCP客户端和服务端的实现方法,包括基本的socket编程、使用socketserver框架搭建服务等,展示了数据收发的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
#-*-coding:utf-8-*-
#tcp 客户端


import socket

HOST='127.0.0.1'
POST=3214

s=socket.socket()
try:
    s.connect((HOST,POST))
    data='你好!'
    while data:
        s.sendall(data.encode('utf-8'))
        data=s.recv(1024)
        print('Receive from Server:\n',data.decode('utf-8'))
        data=input('Please input an infor:\n')
except socket.error as err:
    print(err)
finally:
    s.close()
#!/usr/bin/env python
#-*-coding:utf-8-*-
#tcp 服务器端链接
import socket

HOST=''
POST=3214

s=socket.socket()
s.bind((HOST,POST))
s.listen(5)
clnt,addr=s.accept()
#客户端对象

print("Client Address:",addr)

while True:
    data=clnt.recv(1024)
    #从客户端接受数据
    if not data:
        break
    print("Recieve Data:",data.decode('utf-8'))
    #接受为二进制
    clnt.send(data)

clnt.close()
s.close()

#!/usr/bin/env python
#-*-coding:utf-8-*-
#用socketserver 框架搭建tcp服务器端

import socketserver
import threading


#关闭服务器,在不同的线程
def sd():
    if serv:
        serv.shutdown()

#处理类
class MyHdl(socketserver.StreamRequestHandler):
    def handle(self):
        while True:
            data=self.request.recv(1024)
            print('收到数据:',data.decode('utf-8'))
            if data==b'bye':
                break
            self.request.sendall(data)
        print('本次服务结束。')
        threading.Thread(target=sd).start()



if __name__=='__main__':
    HOST=''
    PORT=3214
    #实例化服务器端
    serv=socketserver.TCPServer((HOST,PORT),MyHdl)
    #启动服务
    serv.serve_forever()

#!/usr/bin/env python
#-*-coding:utf-8-*-
#socketserver客户端
import socket

HOST='127.0.0.1'

PORT=3214

s=socket.socket()
s.connect((HOST,PORT))
data="你好!"
while data:
    s.sendall(data.encode('utf-8'))
    if data=='bye':
        break
    data=s.recv(1024)
    print("收到数据: ",data.decode('utf-8'))
    data=input('输入要发送的信息:')

s.close()
#!/usr/bin/env python
#-*-coding:utf-8-*-
#socketserver rf客户端
import socket

HOST='127.0.0.1'

PORT=3214

s=socket.socket()
s.connect((HOST,PORT))
data="你好!"
while data:
    data+='\n'
    s.sendall(data.encode('utf-8'))
    data=s.recv(1024)
    print("收到数据: ",data.decode('utf-8').strip('\n'))
    data=input('输入要发送的信息:')

s.close()

#!/usr/bin/env python
#-*-coding:utf-8-*-
#用socketserver 框架搭建tcp服务器端
#用rfile,wfile读取数据
import socketserver
import threading


#关闭服务器,在不同的线程
def sd():
    if serv:
        serv.shutdown()

#处理类
class MyHdl(socketserver.StreamRequestHandler):
    def handle(self):
        while True:
            #读取一行
            data=self.rfile.readline()

            if not data:
                break
            #不包含最后的换行符
            print('收到数据:',data.decode('utf-8').strip('\n'))
            self.wfile.write(data)

        print('本次服务结束。')
        threading.Thread(target=sd).start()



if __name__=='__main__':
    HOST=''
    PORT=3214
    #实例化服务器端
    serv=socketserver.TCPServer((HOST,PORT),MyHdl)
    #启动服务
    serv.serve_forever()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值