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

python网络编程
/*×××××××××××××××××××××××××
创建一个能接受客户端的消息,
在消息前加一个时间戳后返回的tcp服务器
×××××××××××××××××××××××××*/

#!/usr/bin/env python

from socket import *
from time import ctime

HOST=''
PORT=21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) 
tcpSerSock.setsockopt(SOL_SOCKET, SO_REUSEPORT, True) 
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)


while True:
    print'waiting for connect ...'
    tcpCliSock, addr = tcpSerSock.accept()
    print'... connected from :' ,addr

    while True:
         data = tcpCliSock.recv(BUFSIZ)
         if not data:
            break
         tcpCliSock.send('[%s] %s'%(ctime(), data))
         tcpCliSock.close()
tcpSerSock.close()

 

在进入到服务器无限循环后,被动的等待连接,当有连接的时候,我们进入对话循环,等待客户端发送数据,如果消息为空,表示客户端已经退出,那就再去等待下一个客户端连接,得到客户端消息后,我们要在消息前加一个时间戳然后返回,最后一行不会被执行,放在这里是提醒,服务器退出的时候记得调用close()函数
/*×××××××××××××××××××××××××
创建一个tcp客户端,
程序会提示用户输入要传给服务器的信息,
显示服务器返回的加了时间戳的结果
×××××××××××××××××××××××××*/

#!/usr/bin/env python

from socket import *

HOST= 'localhost'
PORT=21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

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

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

tcpCliSock.close()

 

客户端有一个无限循环,用户没有输入或者服务器由于某种原因退出的时候,导致函数recv()失败,在一般情况下,客户端会把用户输入的字符发送给服务器进行处理,然后接收并显示服务器传回来的加了时间戳的字符串

/*×××××××××××××××××××××××
×创建一个udp的服务器和客户端
×××××××××××××××××××××××××*/

#!/usr/bin/env python

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

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

while True:
    print 'waiting for message...'
    data, addr = udpSerSock.recvfrom(BUFSIZ)
    udpSerSock.sendto('[%s] %s' % (ctime(), data), addr)
    print '...received from and returned to:', addr

udpSerSock.close()




#!/usr/bin/env python

from socket import *

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

udpCliSock = socket(AF_INET, SOCK_DGRAM)

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

udpCliSock.close()

 

  

UDP和TCP服务器的区别,由于数据报套接字是无连接的,所以无法吧客户端连接交给另外的套接字进行后续的通讯,这些服务器只是接受消息,需要的话,给客户端返回一个结果就可以的
UDP和TCP客户端的区别,我们不用先去和UDP服务器建立连接,而是直接把消息发出去,等待服务器的回复,得到了加了时间戳的字符串以后,把他显示出来,然后再继续其他消息,在输入结束后,退出循环,关闭套接字

posted @ 2016-07-27 11:37  kaylee  阅读(242)  评论(0编辑  收藏  举报