socket服务端和客户端数据传输(TCP)
服务器端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import socket #创建一个socket对象 socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "127.0.0.1" port = 9999 #绑定地址 socket_server.bind((host, port)) #设置监听 socket_server.listen( 5 ) # socket_server.accept()返回一个元组, 元素1为客户端的socket对象, 元素2为客户端的地址(ip地址,端口号) client_socket, address = socket_server.accept() #while循环是为了让对话持续 while True : #接收客户端的请求 recvmsg = client_socket.recv( 1024 ) #把接收到的数据进行解码 strData = recvmsg.decode( "utf-8" ) #设置退出条件 if strData = = 'q' : break print ( "接收: %s" % strData) #输入 msg = input ( "发送: " ) #发送数据,需要进行编码 client_socket.send(msg.encode( "utf-8" )) #关闭服务器端 socket_server.close() |
客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import socket #创建一个socket对象 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "127.0.0.1" port = 9999 #连接服务端 client.connect((host, port)) while True : send_msg = input ( "发送: " ) #设置退出条件 if send_msg = = "q" : break send_msg = send_msg #发送数据,编码 client.send(send_msg.encode( "utf-8" )) #接收服务端返回的数据 msg = client.recv( 1024 ) #解码 print ( "接收:%s" , % msg.decode( "utf-8" )) #关闭客户端 client.close() |
流程图
socket服务端,客户端互相通信
利用socket传递参数,把运行的程序与客户端结合,先启动服务端,再启动客户端。基础代码如下:
服务端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import socket import time print ( "服务端开启" ) #创建套接字 mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #设置IP和端口 #host = socket.gethostname() host = '127.0.1.1' port = 3333 #bind绑定该端口 mySocket.bind((host, port)) #监听 mySocket.listen( 10 ) while True : #接收客户端连接 print ( "等待连接...." ) client, address = mySocket.accept() print ( "新连接" ) print ( "IP is %s" % address[ 0 ]) print ( "port is %d\n" % address[ 1 ]) while True : #发送消息 msg = input ( "服务端发送:" ) client.send(msg.encode(encoding = 'utf-8' )) print ( "发送完成" ) print (time.strftime( '%Y-%m-%d %H:%M:%S' ,time.localtime(time.time()))) #格式化时间戳为标准格式 if msg = = "EOF" : break if msg = = "quit" : client.close() mySocket.close() print ( "程序结束\n" ) exit() #读取消息 msg = client.recv( 1024 ) print ( "服务端接收:" ,msg.decode( "utf-8" )) #把接收到的数据进行解码 print ( "读取完成" ) if msg = = b "EOF" : break if msg = = b "quit" : client.close() mySocket.close() print ( "程序结束\n" ) exit() |
客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import socket print ( "客户端开启" ) #创建套接字 mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #设置ip和端口 #host = socket.gethostname() host = '127.0.1.1' port = 3333 try : mySocket.connect((host, port)) ##连接到服务器 print ( "连接到服务器" ) except : ##连接不成功,运行最初的ip print ( '连接不成功' ) while 1 : #接收消息 msg = mySocket.recv( 1024 ) print ( "客户端接收:%s" % msg.decode( "utf-8" )) #把接收到的数据进行解码 print ( "读取完成" ) if msg = = b "EOF" : break if msg = = b "quit" : mySocket.close() print ( "程序结束\n" ) exit() #发送消息 msg = input ( "客户端发送:" ) mySocket.send(msg.encode(encoding = 'utf-8' )) print ( "发送完成" ) if msg = = "EOF" : break if msg = = "quit" : mySocket.close() print ( "程序结束\n" ) exit() print ( "程序结束\n" ) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_44649870/article/details/87367670