相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。
UDP方式
服务器端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 创建一个简单的套接字监听请求
import socket
HOST = '192.168.59.255'
PORT = 9998
s = 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
|
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = socket的客户端的简单实现
import socket
PORT = 9998
HOST = '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()
|
是不是很简单啊。我们需要注意的就是socket的第二个参数为SOCK_DGRAM。因为这和TCP方式的SOCK_STREAM 有所不同。
TCP方式
服务器端
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
|
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 简单的tcpsocket的实现
from socket import *
from time import ctime
HOST = ''
PORT = 9999
BUFFERSIZE = 1024
ADDRESS = (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
|
# 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()
|
TCP方式演示结果:(注意先开启服务器端)
服务器端
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTCPServer.py
Waiting for clients cennect!
Connected By ('192.168.59.225', 63095)
('192.168.59.225', 63095) Says: Thu Jul 07 16:01:10 2016 Hello World
('192.168.59.225', 63095) Says: Thu Jul 07 16:01:15 2016 haode
No Data received!
Waiting for clients cennect!
客户端
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTcpClient.py
>>>Hello World
Hi,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
>>>quit
Process finished with exit code 0
总结
简单的使用TCP或者是UDP确实很容易,然而要想更好的利用这两个协议,就需要好好的设计一番了。
这里我想强调的是,注意tcp和udp创建套接字时指定的参数即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/marksinoberg/article/details/51852241