简单的 socket 代码

Posted geloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的 socket 代码相关的知识,希望对你有一定的参考价值。

TCP 编程

客户端代码

将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端

技术分享图片
 1 #!/usr/python3
 2 
 3 import socket
 4 
 5 def socket_client():
 6     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 7 
 8     #获取主机名
 9     host = socket.gethostname()
10     port = 9999
11 
12     #建立连接
13     s.connect((host, port))
14 
15     #接受欢迎消息
16     print(s.recv(1024).decode(utf-8))
17     while True:
18         data = input()
19         #发送数据
20         s.send(data.encode(utf-8))
21         print(s.recv(1024).decode(utf-8))
22     s.send(bexit)
23     s.close()
24 
25 def main():
26     socket_client()
27 
28 if __name__ == __main__:
29     main()
View Code

注意:若服务器需要同时响应多个客户端请求,每个连接都需要一个新进程或新线程处理,否则服务器一次只能服务一个客户端 

 

服务端代码

将从客户端接收到的字符前面加上 HELLO, 再发送回给客户端

技术分享图片
 1 #!/usr/bin/python3
 2 
 3 import socket
 4 import threading
 5 import time
 6 
 7 def tcp_link(sock, addr):
 8     print(Accept new connection from %s %s... % addr)
 9     sock.send(欢迎学习 python 网络编程.encode(utf-8))
10     while True:
11         data = sock.recv(1024)
12         time.sleep(1)
13         if not data or data.decode(utf-8) == exit:
14             break
15         sock.send((HELLO, %s % data.decode(utf-8)).encode(utf-8))
16     sock.close()
17     print(Connection from %s : %s closed. % addr)
18 
19 
20 def socket_server():
21     #创建一个 socket 
22     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#SOCK_STREAM 指定使用面向流的 TCP 协议
23     #其中 AF_INET 指定使用 IPv4 协议,若要使用 IPv6 则指定该参数为 AF_INET6
24 
25     #获取本地主机名
26     host = socket.gethostname()
27 
28     #获取本地主机名
29     host = socket.gethostname()
30 
31     #设置端口号
32     port = 9999
33 
34     #监听端口
35     s.bind((host, port))
36 
37     #设置最大连接数,超过后排队
38     s.listen(5)
39 
40     while True:
41         #接受一个新连接
42         sock, addr = s.accept()
43         # 创建新线程处理TCP连接
44         t = threading.Thread(target = tcp_link, args = (sock, addr))
45         t.start()    
46 
47 
48 def main():
49     socket_server()
50 
51 
52 if __name__ == __main__:
53     main()
View Code

 

UDP 编程

 客户端代码

将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端

技术分享图片
 1 #!/usr/bin/python3
 2 
 3 import socket
 4 
 5 def socket_udp_client():
 6     host = socket.gethostname()
 7     port = 9999
 8     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 9     while True:
10         data = input()
11 
12         #发送数据
13         s.sendto(data.encode(utf-8), (host, port))
14 
15         #接收数据
16         print(s.recv(1024).decode(utf-8))
17 
18 
19 def main():
20     socket_udp_client()
21 
22 
23 if __name__ == __main__:
24     main()
View Code

 

服务端代码

将从客户端接收到的字符前面加上 hello, 再发送回给客户端

技术分享图片
 1 #!/usr/bin/python3
 2 
 3 import socket
 4 
 5 def socket_udp_server():
 6     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #SOCK_DGRAM 参数指定 socket 的类型是 udp
 7     host = socket.gethostname()
 8     port = 9999
 9 
10     #绑定端口
11     s.bind((host, port))
12 
13     #不需要调用 listen 方法,直接接收来自任何客户端的数据
14 
15     while True:
16         #接收数据
17         data, addr = s.recvfrom(1024)
18         #recvfrom 方法返回数据和客户端的地址与端口。这样,服务器收到数据后,直接调用 sendto 就可以把数据用 udp 发送给客户端
19         print(received from %s: %s. % addr)
20         s.sendto(bhello, %s % data, addr)
21 
22 
23 def main():
24     socket_udp_server()
25 
26 
27 if __name__ == __main__:
28     main()
View Code

 

以上是关于简单的 socket 代码的主要内容,如果未能解决你的问题,请参考以下文章

创建自己的代码片段(CodeSnippet)

简单的 socket 代码

代码片段 - Golang 实现简单的 Web 服务器

简单的方法来分享/讨论/协作的代码片段?

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

python 用于在终端中运行的sublime text 3的简单代码片段制作工具