Python 之 Socket编程学习笔记

1.面向连接方式和无连接方式

        面向连接方式,在通信发生之前先建立起一个连接,类似打电话,使用虚拟线路类型的套接字,实现这种连接方式的基本协议是传输控制协议(Transmission Control Protocol,  TCP)。这种通信方式又叫做“虚拟线路”或”流式套接字“。

        代码如下:

tcpSocket=socket(AF_INET,SOCK_STREAM)

        无连接方式,在通信开始前不用建立连接,类似邮递,使用数据图类型的套接字,实现这种连接方式的基本协议是用户数据图协议(User Datagram Protocol, UDP)。

        代码如下:

udpSocket=socket(AF_INET,SOCK_DGRAM)


2.TCP服务器端代码

from socket import *

print '***** Now starting server *****'
Host=''
Port=12306
Buffsize=1024
Addr=(Host,Port)

ServerSocket=socket(AF_INET,SOCK_STREAM)        #初始化一个TCP套接字 
print '* Initing connection...'
ServerSocket.bind(Addr)                         #绑定到地址绑定到套接字上
ServerSocket.listen(5)                          #设置和启动TCP监听程序,参数指定最多允许多少个客户连接到服务器
print '* Connection inited...'

while True:
    print '* Now waiting for connection...\n'
    ClientSocket,addr=ServerSocket.accept()     #接受客户连接(阻断)
    print '* Connected from',addr
    ClientSocket.send('Server: Connect successfully')
    while True:
        data=ClientSocket.recv(Buffsize)        #接受TCP消息
        print '* Client: ',data
        if data == 'quit':
            print '\n* Client ',addr,' disconnected'
            break 
        ClientSocket.send('Server: Message[ %s ] send successfully' % data)
                                                #返回信息给客户端
    ClientSocket.close()
ServerSocket.close()

3.TCP客户端代码

from socket import *
print '***** Now starting client *****'
Host='localhost'
Port=12306
Buffsize=1024
Addr=(Host,Port)
ClientSocket=socket(AF_INET,SOCK_STREAM)         #初始化一个TCP套接字
ClientSocket.connect(Addr)                       #指定地址对TCP服务器进行连接
print 'Trying to connect to the server'
data=ClientSocket.recv(Buffsize)                 #接受TCP消息 
print data
while True:
    data=raw_input('> ')                         #从控制台输入消息
    if not data:
        break
    ClientSocket.send(data)                      #传输TCP消息给服务器
    data=ClientSocket.recv(Buffsize)             #获取TCP消息
    if not data:
        break
    print data
ClientSocket.close()

效果图:



3.UDP服务器端代码

from socket import *

print '***** Now starting server *****'
Host=''
Port=12306
Buffsize=1024
Addr=(Host,Port)

ServerSocket=socket(AF_INET,SOCK_DGRAM)        #初始化一个UDP套接字
ServerSocket.bind(Addr)
print '* Initing connection...'

while True:
    print '* Now waiting for message...\n'
    data , addr=ServerSocket.recvfrom(Buffsize)  
    print '* Get message from',addr
    ServerSocket.sendto('Server: Message [ %s ] send successfully' % data,addr)
                                               #返回信息给客户端
    print '* Client : %s' %data
ServerSocket.close()

4.UDP客户端代码

from socket import *
print '***** Now starting client *****'
Host='localhost'
Port=12306
Buffsize=1024
Addr=(Host,Port)

ClientSocket=socket(AF_INET,SOCK_DGRAM)         #初始化一个TCP套接字

while True:
    data=raw_input('> ')                         #从控制台输入消息
    if not data:
        break
    ClientSocket.sendto(data,Addr)               #传输UDP消息给服务器
    data,addr=ClientSocket.recvfrom(Buffsize)    #获取UDP消息
    if not data:
        break
    print data
ClientSocket.close()

效果图:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Python Socket服务器,以下是一些基本的学习笔记: 1. 创建Socket服务器 使用Python中的`socket`模块创建Socket服务器,可以使用`socket()`函数来创建一个Socket对象,如下所示: ```python import socket # 创建一个Socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` 其中,第一个参数`AF_INET`表示使用IPv4地址族,第二个参数`SOCK_STREAM`表示使用TCP协议,如果使用UDP协议,则应该使用`SOCK_DGRAM`。 2. 绑定Socket服务器 在创建Socket对象之后,需要使用`bind()`方法将Socket对象和一个IP地址及端口号绑定在一起,如下所示: ```python # 绑定IP地址和端口号 server_socket.bind(('127.0.0.1', 8888)) ``` 其中,`bind()`方法的参数是一个元组,第一个元素是IP地址,第二个元素是端口号。 3. 监听Socket服务器 在绑定IP地址和端口号之后,需要使用`listen()`方法开始监听Socket服务器,如下所示: ```python # 开始监听 server_socket.listen(5) ``` 其中,`listen()`方法的参数表示最大连接数,即同时可以连接的客户端数量。 4. 接受客户端连接 当有客户端连接到Socket服务器时,需要使用`accept()`方法来接受客户端连接,如下所示: ```python # 接受客户端连接 client_socket, client_address = server_socket.accept() ``` 其中,`accept()`方法返回一个元组,第一个元素是客户端的Socket对象,第二个元素是客户端的IP地址和端口号。 5. 接收和发送数据 客户端连接到Socket服务器之后,就可以进行数据的接收和发送了,使用`recv()`方法接收客户端发送的数据,使用`send()`方法向客户端发送数据,如下所示: ```python # 接收客户端数据 data = client_socket.recv(1024) # 发送服务器数据 client_socket.send(b'Hello, client!') ``` 其中,`recv()`方法的参数表示接收数据的最大字节数,`send()`方法的参数是要发送的数据,需要将其转换为字节串。 6. 关闭Socket服务器 当与客户端的通信完成后,需要使用`close()`方法关闭Socket服务器,如下所示: ```python # 关闭Socket服务器 server_socket.close() ``` 以上是关于Python Socket服务器的一些基本学习笔记,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值