初级网络编程

Mayuyu学习Python很久了,今天就开始学习Python的网络编程。

 

其实说到网络编程,就必须提到一个关键词---“套接字”,即Socket。网络化的应用程序在开始任何通讯之前都需

要创建套接字,就像电话插口一样,没有它就没有办法进行通讯。对于套接字来说,一般分为两种:基于文件型和基

于网络型。套接字实质上就是一个通信端点。当然,我们可以创建面向连接的套接字或者面向无连接的套接字,分别

对应TCP协议和UDP协议。

 

在网络编程中,都是基于C/S模式的,所以分为客户端和服务端。接下来学习利用Python编写最简单的Socket。

 

先来看基于TCP的Socket:

 

服务端

#Server
from socket import*
from time import ctime

HOST    = '222.27.174.90'
PORT    = 21511
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
    tcpCliSock, addr = tcpSerSock.accept()
    while True:
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        print '%s' %(ctime())
        print data
        tcpCliSock.send('[%s]\n %s' %(ctime(), data))

tcpSerSock.close()

 

客户端

from socket import *

HOST = '222.27.174.90'
PORT = 21511
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
	data = raw_input('>')
	if not data:
		continue
	tcpCliSock.send(data)
	data = tcpCliSock.recv(BUFSIZE)
	print data

tcpCliSock.close()


 

服务端和客户端的HOST与PORT一定要相同才行。

 

基于UDP的Socket:

 

服务端:

#Server
from socket import*
from time import ctime

HOST    = '222.27.174.90'
PORT    = 21512
BUFSIZE = 1024
ADDR = (HOST,PORT)

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
    data, addr = udpSerSock.recvfrom(BUFSIZE)
    print '%s' %(ctime())
    print data
    udpSerSock.sendto('[%s]\n %s' %(ctime(), data), addr)

udpSerSock.close()


客户端: 

from socket import *

HOST = '222.27.174.90'
PORT = 21512
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpCliSock = socket(AF_INET,SOCK_DGRAM)

while True:
    data = raw_input('>')
    if not data:
        continue
    udpCliSock.sendto(data, ADDR)
    data, ADDR = udpCliSock.recvfrom(BUFSIZE)
    print data

udpCliSock.close()


 

接下来学习一些套接字对象的常用函数。。。

 

(1)服务端套接字函数

    s.bind()         绑定地址(主机名,端口)到套接字

    s.listen()       开始TCP监听

    s.accept()       被动接受TCP客户端连接,(阻塞式等待连接的到来)

  

(2)客户端套接字函数

    s.connect()      主动初始化TCP服务器连接

    s.connect_ex()   connect)()函数的扩展版本,出错时返回出错码,而不是抛出异常

 

(3)公共用途的套接字函数

    s.recv()         接收TCP数据

    s.send()         发送TCP数据

    s.sendall()      完整发送TCP数据

    s.recvfrom()     接收UDP数据

    s.sendto()       发送UDP数据

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值