天天看点

python学习笔记(六)网络编程

socket,又叫套接字,是一个抽象的概念。通常用socket表示打开了一个网络连接。

在计算机网络中学过TCP/IP协议,将网络分为物理层、网际层、传输层,应用层等。网络编程一般属于传输层之上的内容,会用到TCP、UDP协议。其中TCP是有连接传输,UDP是无连接的。

开始

网络的作用是实现计算机互连与资源共享,因此数据传输是其核心内容。要实现数据的传输,需要知道要传输目标的IP地址,因此双方互连需要至少知道一个地址。

通常把提前知道地址的那一端称作服务器,发送数据请求的那一端称作客户端:

服务器

服务器接收客户端的数据请求,从客户端的请求信息中得到其地址,然后通过地址将所需数据发送回去。

分为有连接的TCP服务器和无连接的UDP服务器。

TCP的服务器需先建立连接后发送数据,而UDP无需建立连接随时可以接收与发送数据。

def tcp_sever():
    while(true):
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.bind(('127.0.0.1',))
        s.listen()
        sock, addr = s.accept()
        data = sock.recv()
        print data
        sock.send('hello')
        sock.close()
def udp_sever():
    while(true):
        s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        s.bind(('127.0.0.1',))
        data = sock.recv()
        print data
        sock.send('hello')
        sock.close()
           

这两段代码的作用都是从客户端接收数据,打印数据然后发送一个hello,然后结束连接。

bind代表将服务器绑定到一个地址和一个端口上,0.0.0.0是所有地址,代表接收所有地址发来的信息,这里使用本机地址;端口号9999代表这个程序的所在端口。

listen表示开始监听是否有连接

要对多个客户端进行处理必须用到多线程,这里暂时放下。

客户端

客户端要连接服务器必须先知道服务器的IP地址,这里使用127.0.0.1即本机地址作为测试。(连接一些网站用的是网站的域名,域名可以通过域名服务器转换为IP地址)

def tcp_client():
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',))
    str = raw_input()
    s.send(str)
    print s.recv()
    s.close()
def udp_client():
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    str = raw_input()
    s.sendto(str,('127.0.0.1',))
    print s.recv()
    s.close()
           

编写测试代码

def mainfunc():
    cho = raw_input()
    if(cho == '1'):
        print 'tcp_sever'
        tcp_sever()
    elif(cho == '2'):
        print 'tcp_client'
        tcp_client()
    elif(cho == '3'):
        udp_sever()
    elif(cho == '4'):
        udp_client()

if __name__ == '__main__':
    mainfunc()
           
python学习笔记(六)网络编程

参考资料:

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832511628f1fe2c65534a46aa86b8e654b6d3567c000