网络编程: 套接字基于TCP的应用/设置端口可立即重用(一)

1、模拟通信,进行消息收发

【1】初版server端【一】

from socket import *
# 1、创建套接字对象
sock = socket(family = AF_INET,type = SOCK_STREAM,proto = 0)
# 2、绑定地址
sock.bind(("127.0.0.1",8989))
# 3、设置监听
sock.listen(5)
#4、等待连接
print("等待客户端连接...")
connd,addr = sock.accept()
print("已有客户端连接:",addr)

#5、消息收发
#接收消息
data = connd.recv(1024)
print("服务器收到的消息:",data.decode())
#给连接的客户端回复消息,
#给连接的客户端回复消息,
# send方法的参数必须为字节串,【1】【2】两种方式均可以
#【1】对消息进行编码,转换为字节串
#使用【2】的话,不能使用中文,只能为ASCII编码
# sed = connd.send("The server accepted your msg.".encode()) # 【1】
sed = connd.send(b"The server accepted your msg.") #【2】

print("send %d bytes"%sed)

#6、关闭套接字
connd.close()
sock.close()

 

【二】
from
socket import * s = socket() #设置端口可立即重用 s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) print("getsockopt==>",s.getsockopt(SOL_SOCKET,SO_REUSEADDR)) #获取套接字类型 print("type==>",s.type) #获取地址类型 print("famliy==>",s.family) #文件描述符 print("fileno==>",s.fileno()) #绑定地址 s.bind(('192.168.1.4',9999)) #获取套接字绑定的地址 print("getsockname==>",s.getsockname()) s.listen(5) #等待连接 c,addr = s.accept() #获取连接的套接字的客户端地址 print("getpeername==>",c.getpeername()) print("addr:",addr) data = c.recv(1024) print("接收到的数据:",data) c.close() s.close()

 

【1】初版client端  

import socket
# 1、创建套接字对象
sock = socket.socket()
#-------------------
# import导入方式导入socket的话,socket方法不能添加参数,server也一样。
# from import *方式导入时可以添加参数 #python版本:3.7.6
#sock = socket.socket(sock_family = AF_INET, sock_type = SOCK_STREAM,proto = 0)
# Traceback (most recent call last):
#   File "D:/python_program/TCP/tcp-client.py", line 4, in <module>
#     sock = socket.socket(sock_family = AF_INET, sock_type = SOCK_STREAM,proto = 0)
# NameError: name 'AF_INET' is not defined
#------------------
#2 、发起连接
sock.connect(("127.0.0.1",8989))
#3、消息收发
#输入要发送的消息
msg = input("请输入要发送的消息:Msg>>>")
#发送消息
#-----
#sed=sock.send(msg.encode())
#print("send %d bytes"%sed)
#----
sock.send(msg.encode())
# 接收消息
data = sock.recv(1024)
print("收到服务器回复的消息:",data.decode())
#4、关闭套接字
sock.close()

#===========================================================================#

 【2】第二版server,循环发送消息

from socket import * 

#创建套接字
sock = socket(AF_INET,SOCK_STREAM)

#绑定地址
sock.bind(('127.0.0.1',9999))

#设置监听
sock.listen(5)

while True:
    #等待客户端连接
    print("Waiting for connect...")
    connfd,addr = sock.accept()
    print("Connect from",addr)
    while True:
        #消息收发
        data = connfd.recv(1024)
        if not data:
            break
        print("Receive:",data.decode())
        n = connfd.send(b"Receive your message")
        print("send %d bytes"%n)
    #关闭套接字
    connfd.close()
sock.close()

【2】第二版client,循环发送消息

from socket import * 

#创建套接字
sock = socket()

#发起连接
sock.connect(('127.0.0.1',9999))

while True:
    #消息收发
    msg = input("Msg>>")
    if not msg:
        break
    sock.sendall(msg.encode())
    data = sock.recv(1024)
    print(data.decode())

sock.close()

 

posted @ 2021-01-03 18:40  昱成  阅读(368)  评论(0编辑  收藏  举报