博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

socket通信

Posted on 2018-05-19 10:22  alex_hrg  阅读(134)  评论(0)    收藏  举报

单并发: 同时连接服务器只有一个client

  server:

import socket
sock = socket.socket()
sock.bind(('localhost',6969))
sock.listen()
print("kai shi le")
conn,addr = sock.accept()   
#conn为服务端信息:<socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 52369)>
#addr为客户端信息:('127.0.0.1', 52369)
while True: data = conn.recv(8096).decode() print('recv:',data) resp = data.upper() conn.send(resp.encode())

  client:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg

import socket
sock = socket.socket()
sock.connect(('localhost',6969))
flag = False
while not flag:
    data = input(">>:").strip()
    if data == "b":flag = True
    if len(data) == 0:continue
    sock.send(data.encode())
    recv_data = sock.recv(8096)
    print("recv:",recv_data.decode())
sock.close()

  

多并发:  同时连接服务器可以有多个client

  server:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg

import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        '''try内的代码就是要实现的功能,目前是实现小写转大写,可以自定义,
        try是在客户端结束时不报错
        '''
        try:
             while True:
                self.data = self.request.recv(1024).strip()
                print("{} wrote:".format(self.client_address[0]))
                print(self.data)
                self.request.sendall(self.data.upper())
        except ConnectionResetError as e:
            print(e)
if __name__ == "__main__":
    HOST, PORT = "localhost", 6969
    server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

  client:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg

import socket
sock = socket.socket()
sock.connect(('localhost',6969))
flag = False
while not flag:
    data = input(">>:").strip()
    if data == "b":flag = True
    if len(data) == 0:continue
    sock.send(data.encode())
    recv_data = sock.recv(8096)
    print("recv:",recv_data.decode())
sock.close()

  ...