本文实例讲述了Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能。分享给大家供大家参考,具体如下:
由于目前工作的需要,需要在IPv4和IPv6两种网络模式下TCP和UDP的连接,要做到客户端发包,服务端收包。
前几天写了代码,但是把UDP的客户端和服务端使用TCP模式的代码了。今天在公司使用该工具的时候,发现了问题,忘记了UDP不需要验证。疏忽,疏忽。不过刚刚接触编程,可以原谅。
现在在家,已经把代码改好了。经测试可以使用。
先运行客户端:
1
|
python MiniClient.py host port mode(t4, t6, u4, u6) |
再运行服务端:
1
|
python MiniServer.py host port mode(t4, t6, u4, u6) |
客户端代码如下:
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
41
42
43
44
45
46
47
48
49
50
51
52
|
import socket, sys import time class MiniClient: h = '' p = '' m = '' def __init__( self , host, port, mode): self .h = host self .p = int (port) self .m = mode def tcpC4( self ): tcpT4Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "Done........" tcpT4Client.connect(( self .h, self .p)) print "TCP IPv4 TCP mode connecting..." while True : time.sleep( 1 ) tcpT4Client.send( 'hello' ) print "hello send to Server" def udpC4( self ): udpT4Client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print "UDP TCP IPv4 Mode connecting..." while True : time.sleep( 1 ) udpT4Client.sendto( "hello" , ( self .h, self .p)) print "Hello Send to " , self .h , ' Use ' , self .p, 'Port' def tcpC6( self ): tcpT4Client = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) print "Done........" tcpT4Client.connect(( self .h, self .p)) print "TCP IPv6 TCP mode connecting..." while True : time.sleep( 1 ) tcpT4Client.send( 'hello' ) print "hello send to Server" def udpC6( self ): udpU6Client = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) print "UDP TCP IPv4 Mode connecting..." while True : time.sleep( 1 ) udpU6Client.sendto( "hello" , ( self .h, self .p)) print "Hello Send to " , self .h , ' Use ' , self .p, 'Port' if __name__ = = "__main__" : x = MiniClient(sys.argv[ 1 ], sys.argv[ 2 ], sys.argv[ 3 ]) if x.m = = 't4' : x.tcpC4() elif x.m = = 't6' : x.tcpC6() elif x.m = = 'u4' : x.udpC4() else : x.udpC6() |
服务端代码:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import socket, sys class MiniServer: h = '' p = '' m = '' def __init__( self , host, port, mode): self .h = host self .p = int (port) self .m = mode def serverT4( self ): tcpT4Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "Server Socket Created......." tcpT4Server.bind(( self .h, self .p)) print "Wating for connecting......." tcpT4Server.listen( 5 ) while True : clientSock, clientaddr = tcpT4Server.accept() print "Connected from: " , clientSock.getpeername() clientSock.send( 'Congratulations........' ) while True : buf = clientSock.recv( 1024 ) print buf #clientSock.close() def udpT4( self ): udpT4Server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print "UDP TCP IPv4 Mode Start....." udpT4Server.bind(( self .h, self .p)) print "UDP Server Start" while True : udpT4Data, udpT4ServerInfo = udpT4Server.recvfrom( 1024 ) print "Receive from " , udpT4ServerInfo, " and The Data send from The Client is :" , udpT4Data def serverT6( self ): tcpT6Server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) print "Server Socket Created......." tcpT6Server.bind(( self .h, self .p)) print "Wating for connecting......." tcpT6Server.listen( 5 ) while True : clientSock, clientaddr = tcpT6Server.accept() print "Connected from: " , clientSock.getpeername() clientSock.send( 'Congratulations........' ) #clientSock.close() def udpT6( self ): udpT6Server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print "UDP TCP IPv4 Mode Start....." udpT6Server.bind(( self .h, self .p)) print "UDP Server Start" while True : udpT4Data, udpT6ServerInfo = udpT6Server.recvfrom( 1024 ) print "Receive from " , udpT6ServerInfo, " and The Data send from The Client is :" , udpT4Data if __name__ = = "__main__" : x = MiniServer(sys.argv[ 1 ], sys.argv[ 2 ], sys.argv[ 3 ]) if x.m = = 't4' : x.serverT4() elif x.m = = 't6' : x.serverT6() elif x.m = = 'u4' : x.udpT4() else : x.udpT6() |
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://www.cnblogs.com/roicel/archive/2013/03/06/2947068.html