python3.6socket库_Python---socket库

为方便以后查询和学习,特从常用库函数和示例来总结socket库

1. 术语

family:AF_INET

socktype:SOCK_STREAM或SOCK_DGRAM

protocol:IPPROTO_TCP

2. 常用库函数

(1). socket()

#创建socket

(2). gethostname()

#返回主机名

>>>>USER-20170820ND

(3). gethostbyname(hostname)

#根据主机名得到IP

>>>>192.168.3.8

(4). gethostbyname_ex(hostname)

#根据主机名返回一个三元组(hostname, aliaslist, ipaddrlist)

>>>> ('USER-20170820ND', [], ['192.168.3.8'])

(5). gethostbyaddr(ip_addr)

#返回一个三元组(hostname, aliaslist, ipaddrlist)

>>>> ('USER-20170820ND.ws325', [], ['192.168.3.8'])

(6). getservbyname(servicename[, protocolname])

#返回端口号

port = socket.getservbyname("http", "tcp")

>>>> 80

(7). getprotobyname()

ppp = socket.getprotobyname("tcp")

>>>> 6

(8). getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)

(9). ntohs() ntohl()

#将网络字节序转换为主机字节序

(10). htons() htonl()

#将主机字节序转换为网络字节序

(11). inet_aton()

(12). inet_ntoa()

(13). getdefaulttimeout()

#得到设置的时间超时

(14). setdefaulttimeout()

#设置时间超时

3. Serve和Client通讯示例

Serve.py

#coding:UTF-8

import socket #导入socket库

classServe:'Socket Serve!!!'

#设置退出条件

stop =Falsedef __init__(self):

hostname=socket.gethostname()print(hostname)

self.ip=socket.gethostbyname(hostname)

self.port= 1122self.addr=(self.ip,self.port)print(self.addr)

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)print(s)

s.bind(self.addr)

s.listen(5)while notself.stop:print('等待接入,侦听端口:%s -- %d' %(self.ip, self.port))

clientsocket, clientaddr=s.accept()print ("接入成功:%s--%d" %(clientaddr[0], clientaddr[1]))whileTrue:try:

buff= clientsocket.recv(1024)print ("接收数据:%s" %(buff))except:

clientsocket.close()break;if notbuff:print ("not buff!!!")break;

self.stop=(buff.decode('utf8').upper()=="QUIT")ifself.stop:print ("响应退出命令!")breakclientsocket.close()

s.close()if __name__ == "__main__":

serve=Serve()

View Code

Client.py

#coding:UTF-8

#client

importsocketclassClient:'Socket Client!'

def __init__(self, ip, port):

self.ip=ip

self.port=port

self.addr=(self.ip, self.port)print(self.addr)defconnect(self):

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)print(s)

s.connect(self.addr)returns#Client.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#print (Client.s)

#Client.s.connect(self.addr)

if __name__ == "__main__":

ip= "192.168.3.8"port= 1122client=Client(ip, port)print (client.__doc__)

client.connect()whileTrue:

data= input(">")if notdata:break;

sock.send(data.encode("utf8"))print ("发送信息:%s" %(data))if data.upper() == "QUIT":break;

sock.close()

View Code

3. udp示例

#coding=utf-8

from socket import *

from time importstrftime

ip_port=('127.0.0.1',9000)

bufsize=1024tcp_server=socket(AF_INET,SOCK_DGRAM)

tcp_server.bind(ip_port)whileTrue:

msg,addr=tcp_server.recvfrom(bufsize)print('===>',msg)if notmsg:

time_fmt='%Y-%m-%d %X'

else:

time_fmt=msg.decode('utf-8')

back_msg=strftime(time_fmt)

tcp_server.sendto(back_msg.encode('utf-8'),addr)

tcp_server.close()

View Code

#coding=utf-8

from socket import *ip_port=('127.0.0.1',9000)

bufsize=1024tcp_client=socket(AF_INET,SOCK_DGRAM)whileTrue:

msg=input('请输入时间格式(例%Y %m %d)>>:').strip()

tcp_client.sendto(msg.encode('utf-8'),ip_port)

data=tcp_client.recv(bufsize)print(data.decode('utf-8'))

tcp_client.close()

View Code

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值