基于socket的网络编程

TCP协议下的socket使用

服务器端模板
import socket
server = socket.socket()
server.bind(('192.168.12.211',16888))  #插入电话卡
server.listen()   #开始监听
while True:
    client,addr = server.accept() #链接循环,可以不断接收新链接
    while True:      
        try:
            data = client.recv(1024)   #循环收发消息
            if not data:     #判断消息是否为空
                client.close()   
                break
            print('收到客户端的消息:%s'%data.decode('utf-8'))
            client.send(data)
        except ConnectionResetError:    #接收客户端关闭时的异常
            print('客户端强行关闭链接')
            client.close()
            break
    break
server.close()
客户端:
import socket
client = socket.socket()
client.connect(('192.168.12.211',16888))  #链接到服务器
while True:
    msg = input('>>>>>:').strip()     #循环发送信息
    client.send(msg.encode('utf-8'))    
    data = client.recv(1024)     #接收服务器信息
    print('收到服务器:%s'%data.decode('utf-8'))

基于UDP协议的 socket通讯

服务器端
import socket

# UDP协议 在创建socket是 只有一个类型不同
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0)

server.bind(("127.0.0.1",8888))


while True:
    data,addr = server.recvfrom(1024) # 阻塞 直到收到数据为止
    print("收到来自%s的消息:%s" % (data.decode("utf-8"),addr[0]))
    # 返回值为 数据 和 对方ip地址 和端口号
    server.sendto(data.upper(),addr)


server.close()
客户端
import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)



while True:
    data = input(">>:").encode("utf-8")
    client.sendto(data,("127.0.0.1",8888))
    d,addr = client.recvfrom(1024)
    print(d.decode("utf-8"))

client.close()
原文地址:https://www.cnblogs.com/fanbiyong/p/10174526.html