python socket 函数介绍

socket

函数原型:socket.socket([family[,type[,proto]]])

family参数取值(协议族):

  socket.AF_INET        -->ipv4协议

  socket.AF_INET6   -->ipv6协议

type参数取值:

  SOCK_STREAM         -->tcp协议相互通信在所有数据传送前必须使用connect()来建立连线状态.

  SOCK_DGRAM          -->udp协议相互通信

sendto

函数原型:socket.sendto(string,address)

发送字符创string到address指定的主机。

string:用来发送的字符创

address:是一个元组,需要指定ip地址和端口号

recvfrom

函数原型:socket.recvfrom(bufsize[,flags])

用来从网络上接受UDP数据包,并将接受到的数据存放在buffsize定义的内存空间里边,一般不小于1024字节,发送的字节一般都小于1024字节。

tcp传输实例

#socket_send.py

#client

#!/usr/bin/env python
#coding:GBK
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.sendto('Hello world',('10.74.84.186',9999))
data = s.recv(1024)
print 'received sendback:',data
s.close()

#socket_recv.py

#server

#!/usr/bin/env python
#coding=GBK
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',9999))
s.listen(5)
clientsock, clientaddr = s.accept()
data = clientsock.recv(1024)
print 'received message:',data
clientsock.send(data + "-收到")
clientsock.close()

send端报错

root@liqian-python:/pythonsamba# python socket_tcp.py
Traceback (most recent call last):
File "socket_tcp.py", line 4, in <module>
s.sendto('Hello world',('10.74.84.186',9999))
socket.error: [Errno 32] Broken pipe

原因:SOCK_STREAM是提供双向连续且可信赖的数据流,即TCP,在所有数据传送前必须使用connect()来建立连线状态。

python代码实现解决方案

#socket_send.py

#!/usr/bin/env python
#coding:GBK
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('10.74.84.186',9999))
s.send('Hello world')
data = s.recv(1024)
print 'received sendback:',data
s.close()

原文地址:https://www.cnblogs.com/i1991/p/6878762.html