python 中的网络编程主要用到socket模块,模块中的socket()函数被用来创建套接字。
在同一台主机上运行,只要IP地址都为127.0.0.1(localhost)即可,但在不同主机间,需要修改IP.
本例子参考《python核心编程第二版》例题。
tcp服务器端
#!/usr/bin/env python
from socket import *
from time import ctime
HOST = 'A' #主机(服务器)地址
PORT = 20000
BUFSIZE = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM) # 创建套接字
tcpSerSock.bind(ADDR) # 监听
tcpSerSock.listen(5)
while True:
print 'wating for connection...'
tcpCliSock,addr = tcpSerSock.accept() #被动接收连接
print '...connected from:',addr
while True:
data = tcpCliSock.recv(BUFSIZE)#接收来自客户端的数据
if data=='exit':
break
print data #输出客户端的数据
sersay=raw_input("what do you want to say")
tcpCliSock.send('%s'% (sersay)) #返回给客户端的数据
tcpCliSock.close()
tcpSvrSock.close()
客户端
#!/usr/bin/env python
from socket import *
HOST = 'A' #IP地址一致,指向服务器地址
PORT = 20000
BUFSIZE = 1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = raw_input('>')
if data=='exit':
break
tcpCliSock.send(data) #发送给服务器的数据
data = tcpCliSock.recv(BUFSIZE) #接收数据
if data=='exit':
break
print data
tcpCliSock.close()
经过测试这是可运行的,win主机为服务器,桥接的linux为客户端。
成功通信,wireshark可以抓到互传的数据。
特指明,本程序需要在命令行模式下运行。在IDE中,不同主机间是无法通信的(但各自可以运行),其在IDE上可行的条件是服务器客户端同时在同一台机器上,且wireshark抓不到通信消息。