基于TCP协议的套接字编程

基于TCP协议的套接字编程

基于socket通信的内部算法,当发送的消息为空的时候,接收端不会收到消息,而发送端向下执行到recv,两端出于僵持状态。
所以在发送端需要有个判断,如果发送的为空,则重新输入发送内容。

socket

socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。

基于TCP协议的套接字编程(循环)

服务端

import socket

#买手机
phone=socket.socket()

#插入/绑定手机卡
phone.bind(('127.0.0.1',8080))

#开机
phone.listen(5) #半连接池,限制的是请求数

#等待电话连接
print('start....')
while True:
    conn,client_addr=phone.accept()
    print(conn)
    print('已经有一个连接建立成功',client_addr)
    
    while True:
        try:
            print('服务端正在收数据...')
            data=conn.recv(1024)
            if len(data)==0:break
            print('来自客户端的数据',data)
            conn.send(data.upper())
        except ConnectionResetError:
            break
    #挂掉电话连接
    conn.close()

#关机
phone.close()
            

客户端1

import socket

#买手机
phone=socket.socket()

#拨电话
phone.connect(('127.0.0.1',8080))

#通信:发\收消息
while True:
    msg=input('>>>').strip()
    if len(msg)==0:continue
        phone.send(msg.encode('utf-8'))
        
        data=phone.recv(1024)
        print(data)
#关闭
phone.close()

客户端2

import socket

#买手机
phone=socket.socket()

#拨电话
phone.connect(('127.0.0.1',8080))

#通信:发\收消息
while True:
    msg=input('>>>').strip()
    if len(msg)==0:continue
        phone.send(msg.encode('utf-8'))
        
        data=phone.recv(1024)
        print(data)
#关闭
phone.close()

注意:必须先启动服务端,开启端口后才能再开启客户端。

在没有并发通信时,客户端1和服务器建立连接,端口被占用,客户端2向服务器发送信息时,服务器收不到信息。只有当客户端1断开后,客户端2才能向服务器发送消息。

posted @ 2019-06-26 16:26  Firekeeper  阅读(147)  评论(0编辑  收藏  举报