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

本文介绍了网络编程中的核心概念——Socket,并通过TCP和UDP两种不同类型的服务器和客户端实例详细讲解了Socket的工作原理及其在网络通信中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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',9999))
        s.listen(2)
        sock, addr = s.accept()
        data = sock.recv(1024)
        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',9999))
        data = sock.recv(1024)
        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',9999))
    str = raw_input()
    s.send(str)
    print s.recv(1024)
    s.close()
def udp_client():
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    str = raw_input()
    s.sendto(str,('127.0.0.1',9999))
    print s.recv(1024)
    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()

这里写图片描述

参考资料:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832511628f1fe2c65534a46aa86b8e654b6d3567c000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值