#!/usr/bin/env python #-*- coding:utf-8 -*- import socket #创建socket对象 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #设置监听的IP与端口 sk.bind((‘127.0.0.1‘,6666)) #设置client最大等待连接数 sk.listen(5) while True: #循环 print ‘waiting client connection .......‘ #只有accept & recv 会阻塞,这里accept阻塞,直到有client连接过来 #connection代表客户端对象,address是客户端的IP connection,address = sk.accept() #等待接收客户端信息 client_messge = connection.recv(1024) #打印客户端信息 print ‘client send messge‘,client_messge #发送回执信息给client 收发必须相同 connection.sendall(‘hello Client this server‘) #关闭和client的连接 connection.close()
#!/usr/bin/env python #-*- coding:utf-8 -*- import socket #创建socket对象 ck = socket.socket() #通过IP&端口连接server ck.connect((‘127.0.0.1‘,6666)) #发送消息给服务端 ck.sendall(‘hello server this is Clinet‘) #接收服务端的消息并打印 server_answer = ck.recv(1024) print server_answer #关闭连接 ck.close()
socket创建参数详解:
server端:
#创建socket对象 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket.AF_INET 参数一 #socket.SOCK_STREAM 参数二
参数一:地址簇
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 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
在创建socket对象的时候一般使用默认即可:sk = socket.socket()
参考资料:
http://www.cnblogs.com/wupeiqi/articles/5040823.html
http://baike.baidu.com/link?url=TirxwGEE0_cVLvQHkGugEDtXg1X4S4r7O8fATL6KJcJhRuYYrtRz7UhG0RBekqYTU7p5u3gOMdx5Kq9eb8Ix9-C0_eybcUcBZOiH0XEWbQq
原文:http://www.cnblogs.com/luotianshuai/p/5058562.html