参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html
socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
参数一:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 IPv6 socket.AF_UNIX 只能够用于单一的Unix系统进程间通信 参数二:类型 socket.SOCK_STREAM 流式socket , for TCP (默认) socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。 socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。 socket.SOCK_SEQPACKET 可靠的连续数据包服务 参数三:协议 0 (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
''' 服务器端 ''' import socket # 声明socket类型,同时生成socket连接对象 server = socket.socket() # 绑定要监听的端口,bind传递的是一个元祖 server.bind(("localhost",6969)) # 监听6969端口 server.listen() print("接入前") # 等待接入 # conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例) # addr:对方的地址 conn, addr = server.accept() print("coon:",conn ) print("addr:",addr) print("接入后") data = conn.recv(1024) print(data) # 返回一个值给客户端,这里是将data转换为大写字母返回 conn.send(data.upper()) server.close()
''' 客户端 ''' import socket # 声明socket类型,同时生成socket连接对象 client =socket.socket() # 连接本地,端口为6969,注意,connect里面是一个元祖 client.connect(("localhost",6969)) # 发送数据,3.0以上都是bytes数据 client.send(b"hello word!") # 收取服务器端返回的数据,1024是1KB,就是1024字节 data = client.recv(1024) print(data) # 关闭连接 client.close()
单线程一直连接的socket
''' 客户端 建立连接对象 连接 发送信息到服务器确认 接收服务器返回的数据 ''' import socket # 声明socket类型,同时生成socket连接对象 client =socket.socket() # 连接本地,端口为6969,注意,connect里面是一个元祖 client.connect(("localhost",6969)) # 发送数据,3.0以上都是bytes数据 # client.send(b"hello word!") exit_flag = False while not exit_flag: msg = input(">>>>").strip() # 不能发送空字节过去服务器端 if len(msg) == 0: continue elif msg == "q": break client.send(msg.encode("utf-8")) # 收取服务器端返回的数据,1024是1KB,就是1024字节 data = client.recv(1024) print(data.decode()) # 关闭连接 client.close()
''' 服务器端 生成连接对象 绑定要监听的端口 监听端口 等待客户端接入 接收客户端发送的数据 返回一个值给客户端 ''' import socket import os path = os.path.dirname(os.path.abspath(__file__)) print(path) # 声明socket类型,同时生成socket连接对象 server = socket.socket() # 绑定要监听的端口,bind传递的是一个元祖 server.bind(("localhost",6969)) # 监听6969端口 server.listen(5) while True: print("接入前") # 等待接入 # conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例) # addr:对方的地址 conn, addr = server.accept() print("coon:",conn ) print("addr:",addr) print("接入后") while True: data = conn.recv(1024) # 因为发送过来的要是byte字节,所以这边需要decode一下恢复 print(data.decode()) print(data) # 如果没有数据,断开客户端连接 if not data: print("客户端已经断开") break # 返回一个值给客户端,这里是将data转换为大写字母返回 conn.send(data.upper()) server.close()