計畫上遇到了些許困難,
主要是 client 端用 socket 傳送 string data 給 server 端,而 server 端是用 libpcap 來接收資料,
在第二次接收資料時會在client端出現 socket error 的現象( socket.error:[Errno111]Connection refused ),
導致socket無法繼續運作,資料也就無法繼續傳了...
我到 stackoverflow 發問,希望大家可以給我些意見 ^ ^
經討論後發現 原因在於Server端沒有建立Socket做Binding和Listening,
會造成Client端的Socket做connect連線後,Server端會傳回 ICMP Port Unreachable 的 message,
造成第二次連線出現 socket.error:[Errno111]Connection refused 的 Error
解決方法:
在Client端不要建立connect的連線,用UDP中sendto()此方法來取而代之,
如此Client就可以持續傳資料給Server端,而Server端則利用Libpcap來接收封包資料!!
程式碼如下:
#!/usr/bin/env python
# UDP Client - udpclient.py
# code by www.cppblog.com/jerryma
import socket, sys
host = sys.argv[1] #Server IP Address
textport = sys.argv[2] #Server Binding Port
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #socket
try:
port = int(textport)
except ValueError:
port = socket.getservbyname(textport, 'udp')
#s.connect((host, port)) #connect 這行要註解掉喔!!
while 1:
print "Enter data to transmit:"
data = sys.stdin.readline().strip() #UDP data
#s.sendall(data) #Send UDP data
s.sendto(data, (host, port))
print "Looking for replies; press Ctrl-C or Ctrl-Break to stop."
print "\n"
請先 登入 以發表留言。