最近两天把第一部分的网络编程socket好好学习了一番,收获也蛮多的。。。
套接字:能使运行在不同或相同计算机上运行的进行通信;套接字一种是基于文件的(同一台计算机进程间通信),另一种是基于网络的(同一台或不同计算机进程通信),经常使用的是AF_INET
套接字又分:无连接的 和 面向连接的;面向连接的套接字,也就是我们常说的tcp连接;无连接的套接字,就是udp;因为基于网络的所以就要通过ip协议来进行传输,所以下面是通过socket来创建udp和tcp连接:
tcp:tcptest = socket.socket(AF_INET,SOCK_STREAM) tcp:流套接字,SOCK_STREAM
udp: udptest = socket.socket(AF_INET,SOCK_DGRAM) udp:数据报(datagram),SOCK_DGRAM
下面将分别使用tcp和udp进行传输,包括服务端和客户端(本次测试:服务端和客户端都是在本机)
1、tcp创建服务器和客户端,常用的方法:s.bind()、s.listen()、s.accept()、s.connect()、s.recv()、s.send()
s.bind():将地址和端口绑定到套接字上;s.listen():设置并启动监听器;s.accept():接收tcp客户端连接
s.connect():tcp客户端连接服务器;s.recv():接收tcp消息;s.send():发送tcp消息
a:TCP服务器:TcpServer.py
#coding=utf-8 """
author : xiaoshitou
date : 2016-08-08
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) tcpServer = socket(AF_INET, SOCK_STREAM)
tcpServer.bind(addr)
tcpServer.listen(5) while True:
print 'TCP...waiting for connection...'
tcpClientSock, addr = tcpServer.accept()
print 'TCP...connected from: {0}'.format(addr,) while True:
data = tcpClientSock.recv(bufsiz)
if not data:
break
tcpClientSock.send('TCP: {0}: {1}'.format(ctime(), data)) tcpClientSock.close()
tcpServer.close()
b:TcpClient.py
#coding=utf-8 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import * host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) tcpclient = socket(AF_INET,SOCK_STREAM)
tcpclient.connect(addr) while True:
data = raw_input('> ')
if not data:
break
tcpclient.send(data)
data = tcpclient.recv(bufsiz)
if not data:
break
print data tcpclient.close()
执行结果:
2、udp创建服务器和客户端,常用方法:s.recvfrom():接收udp消息;s.sendto():发送udp消息
a、UdpServer.py
#coding=utf-8 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) udpserver = socket(AF_INET, SOCK_DGRAM)
udpserver.bind(addr) while True:
print 'UDP...waiting for message...'
data, addr = udpserver.recvfrom(bufsiz)
udpserver.sendto('UDP: {0}: {1}'.format(ctime(), data), addr)
print 'UDP...received from and returned to: {0}'.format(addr,) udpserver.close()
b、UdpClient.py
#coding=utf-8 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) udpclient = socket(AF_INET,SOCK_DGRAM) while True:
data = raw_input('> ')
if not data:
break
udpclient.sendto(data, addr)
data, addr = udpclient.recvfrom(bufsiz)
if not data:
break
print data udpclient.close()
udp服务端和客户端执行结果: