(二)socket(TCP)

在这里插入图片描述
TCP客户端的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
TCP服务器端的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;

UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;
TCP客户端代码:

import  socket

def main():
    tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #链接tcp服务端
    sev_ip=input('输入服务端ip')
    sev_port=input('输入服务端port')
    tcp_socket.connect((sev_ip,int(sev_port)))
    #发送数据
    send_mes=input('输入发送信息:')
    tcp_socket.send(send_mes.encode('utf-8'))
    tcp_socket.close()
if __name__ == '__main__':
    main()

服务器端代码及分析:

import socket

def main():
    #建立套接字
    tcp_sever=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #绑定ip端口号
    tcp_sever.bind(('127.0.0.1',7708))
    #建立监听
    tcp_sever.listen()
    #重点:!将生成新的套接字和客户端一对一
    new_tcp_socket,client_adr=tcp_sever.accept()
    print(client_adr)
    rec_data=new_tcp_socket.recv(1024)        #新的套接字发送接受
    send_data=input('输入发送信息:')
    new_tcp_socket.send(send_data.encode('utf-8'))
    print(rec_data.decode('gbk'))

if __name__ == '__main__':
    main()

在这里插入图片描述
测试一下:一个服务端和多个客户端

import socket

def main():
    '''
    为多个客户服务和为一个客户服务多次
    :return:
    '''
    #建立套接字
    tcp_sever=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #绑定ip端口号
    tcp_sever.bind(('127.0.0.1',7708))
    #建立监听
    tcp_sever.listen()
    while True:   #实现多个客户的服务
        print('等待一个新客户的到来、、、、')
        new_tcp_socket,client_adr=tcp_sever.accept()
        print('新客户是:',client_adr)

        #接受客户端发来的信息
        while True:  #实现一个用户服务多次
                rec_data=new_tcp_socket.recv(1024)
                if rec_data:      #当不为空时显示
                    print('客户端发来的信息:',rec_data.decode('gbk'))
                #向客户端发送信息
                # send_data = input('发送到客户端的信息:')
                # new_tcp_socket.send(send_data.encode('utf-8'))
                else:
                    break
        #结束当前客户端
        new_tcp_socket.close()
    tcp_sever.close()  #关闭开始的套接字

if __name__ == '__main__':
    main()

实现的是一次服务一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值