小小聊天室 Python实现

                       

相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。


UDP方式

服务器端

# coding:utf-8#    __author__ = 'Mark sinoberg'#    __date__ = '2016/7/7'#    __Desc__ = 创建一个简单的套接字监听请求import socketHOST = '192.168.59.255'PORT = 9998s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(('',PORT))print '套接字已启动!'while True:    data,addr = s.recvfrom(1024)    print addr,str(' : ')+data
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

客户端

# coding:utf-8#    __author__ = 'Mark sinoberg'#    __date__ = '2016/7/7'#    __Desc__ = socket的客户端的简单实现import socketPORT = 9998HOST = '192.168.59.255's = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)words = raw_input('Client:')while words != 'quit':    s.sendto(words,(HOST,PORT))    words = raw_input('Client:')s.close()
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

是不是很简单啊。我们需要注意的就是socket的第二个参数为SOCK_DGRAM。因为这和TCP方式的SOCK_STREAM 有所不同。

TCP方式

服务器端

# coding:utf-8#    __author__ = 'Mark sinoberg'#    __date__ = '2016/7/7'#    __Desc__ = 简单的tcpsocket的实现from socket import *from time import ctimeHOST = ''PORT = 9999BUFFERSIZE = 1024ADDRESS = (HOST,PORT)s = socket(AF_INET,SOCK_STREAM)s.bind(ADDRESS)s.listen(5)while True:    print 'Waiting for clients cennect!'    tcpclient,addr = s.accept()    print 'Connected By ',addr    while True:        try:            data = tcpclient.recv(BUFFERSIZE)        except Exception,e:            print e.message            tcpclient.close()            break        if not data:            print "No Data received!"            break        senddata = 'Hi,you send me:[%s]%s'%(ctime(),data.encode('utf8'))        tcpclient.send(senddata.encode('utf8'))        print addr,' Says:',ctime(),data.encode('utf8')tcpclient.close()s.close()
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

客户端

# coding:utf-8#    __author__ = 'Mark sinoberg'#    __date__ = '2016/7/7'#    __Desc__ = 简单的tcp socket客户端的实现from socket import *class TcpClient:    # HOST = 'localhost'    PORT = 9999    HOST = '192.168.59.225'    BUFFSIZ = 1024    ADDR = (HOST,PORT)    def __init__(self):        self.client = socket(AF_INET,SOCK_STREAM)        self.client.connect((self.HOST,self.PORT))        while True:            senddata = raw_input('>>>')            if not senddata:                print 'Please input some words!\n>>>'                continue            if senddata == "quit":                break            self.client.send(senddata.encode('utf8'))            recvdata = self.client.recv(self.BUFFSIZ)            if not recvdata:                break            print recvdata.encode('utf8')if __name__ == "__main__":    client = TcpClient()
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

TCP方式演示结果:(注意先开启服务器端)

服务器端

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTCPServer.pyWaiting for clients cennect!Connected By  ('192.168.59.225', 63095)('192.168.59.225', 63095Says: Thu Jul 07 16:01:10 2016 Hello World('192.168.59.225', 63095Says: Thu Jul 07 16:01:15 2016 haode No Data received!Waiting for clients cennect!
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

客户端

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTcpClient.py>>>Hello WorldHi,you send me:[Thu Jul 07 16:01:10 2016]Hello World>>>Please input some words!>>>>>>haode Hi,you send me:[Thu Jul 07 16:01:15 2016]haode >>>quitProcess finished with exit code 0
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

总结

简单的使用TCP或者是UDP确实很容易,然而要想更好的利用这两个协议,就需要好好的设计一番了。

这里我想强调的是,注意tcp和udp创建套接字时指定的参数即可。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值