zoukankan      html  css  js  c++  java
  • 简单的 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(b'exit')
    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(b'hello, %s' % data, addr)
    21 
    22 
    23 def main():
    24     socket_udp_server()
    25 
    26 
    27 if __name__ == '__main__':
    28     main()
    View Code
  • 相关阅读:
    学生党 应该去 研究研究 Socket(套接字) 实现原理
    收录一些 硬件 相关的 文章
    谈谈 软件 开源项目
    我决定 开启 一个 人工智能 机器学习 技术 的 普及项目 Let it Learn
    我邀请 民科吧 网友 和 三江老师 来 反相吧 辩论 调和级数
    共量子论 丢番图方程组 数值求解 最小分子解
    刚 看了一下 一元三次方程 的 解法
    研究发展 C 语言
    对 量子病态定理 提出的 代数方程 不成立 的 证明
    数学 改革
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/9191227.html
Copyright © 2011-2022 走看看