python socket编程入门级

客户端

import socket
import time

sk = socket.socket()  # 第一步:创建socket对象
address = ('127.0.0.1', 8080)  # 协议是ip+端口(类型元组)
sk.connect(address)  # 第二步:建立链接
while True:
    inp = input('客户端>>>>>>>>>\n')
    if inp == 'exit':
        break
    sk.send(bytes(inp, 'utf8'))  # 第三步:请求数据
    time.sleep(1)  # low方法防止粘包
    data = sk.recv(1024)  # 接收确认信息
    print("接收服务端的数据", str(data, 'utf8'))
sk.close()

  服务端

import socket

# family type
# AF_INET,AF_INET6
# AF_UNIX
# SOCK_STREAM:: TCP
# SOCK_DGRAM :: UDP
# sk只负责绑定端口等待链接,发送接收消息用conn。
sk = socket.socket()  # 默认参数tcp
address = ('127.0.1', 8080)
sk.bind(address)  # 绑定ip协议和端口
sk.listen(3)  # 定义最大可以挂起连接数。
print('服务的waiting.......')
while 1:
    conn, addr = sk.accept()  # 等待接收来自客户端的信息
    print(addr)
    while 1:
        try:
            data = conn.recv(1024)
        except Exception:
            break
        if not data: break
        print('接收到来自客户端的信息......', str(data, 'utf8'))
        inp = input('》》》》》》》》')
        conn.send(bytes(inp, 'utf8'))

  使用多线程版

import socketserver


class MyServer(socketserver.BaseRequestHandler):
    # 重写父类的方法
    def handle(self):
        print('waiting.......')
        while 1:
            conn = self.request
            print(self.client_address)
            while 1:
                try:
                    data = conn.recv(1024)
                except Exception:
                    break
                if not data:
                    break
                print('......', str(data, 'utf8'))
                inp = input('》》》》》》》》')
                conn.sendall(bytes(inp, 'utf8'))
            conn.close()


if __name__ == '__main__':
    host = '127.0.0.1'
    ip = '8080'
    server = socketserver.ThreadingTCPServer((host, ip), MyServer)#多线程通话
    # 不会出现在一个客户端结束后,当前服务器端就会关闭或者报错,而是继续运行,与其他的客户端继续进行通话。
    server.serve_forever()

  

posted @ 2018-09-10 22:27  公众号python学习开发  阅读(345)  评论(0编辑  收藏  举报