python之Socket TCP实战演练

   用socket进行网络开发需了解服务器和客户端的Socket原语,每个原语在不同的高级语言中都有相应的实现方式。TCP的Socket原语如下:

socket():建立Socket对象。bind():绑定。在参数中需要传入绑定的IP地址和端口。listen():监听。只在服务器端有用,告诉操作系统开始监听之前绑定的IP地址和端口,可以在参数中指定允许排队的最大连接数量。connect(): 在客户端连接服务器。参数中需要指定服务器的地址和端口。accept():接受连接。只在服务器端有用,从监听到的连接中取出一个,并将其包装成一个新的Socket对象。send():发送数据。服务器和客户端均可以调用send()向对方发送数据,在send()的参数中传入要发送的数据,通过send()的返回值判断数据是否发送成功。recv():接收数据。服务器和客户端均可调用recv()从对方接收数据。close():关闭连接。通信中的任何一方可以调用close()发起关闭连接请求,另一方收到后也调用close()关闭连接。

下面通过Python代码演示

服务端代码如下:

import  socket


HOST='0.0.0.0'
PORT = 3434
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))#绑定IP与端口
s.listen(1)

while True:
    conn,addr = s.accept()
    print('Client %s connected!'%str(addr) )#输出客户端的IP地址
    dt = '我来自服务端'
    message = 'Current time is ' + str(dt)
    conn.send(message.encode())#向客户端发送时间
    print("Sent:",message)
    conn.close()#关闭链接

与服务器端对应的客户端代码如下:

import socket #socket模块


HOST = '127.0.0.1'
PORT = 3434

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((HOST,PORT))
print('Connect %s:%d OK'%(HOST,PORT))
data = s.recv(1024)#接受数据,本次接收数据的最大长度为1024
print("Received:",data.decode())
s.close()#关闭链接

自行调试,查看执行结果!

注:客户端的Socket端口号由系统自动分配。

猜你喜欢

转载自www.cnblogs.com/cztao/p/9372416.html