爲了實現Nao機器人與電腦端的TCP通信,於是研究了一下Python實現TCP通信,在網上也看到了很多例子,但大多都是在一臺機器上驗證。在兩臺機器上使用,出了一些小故障。
注意:若兩臺電腦通信出了問題,若能ping通!大部分是防火牆的問題。一開始A做服務器,B做客戶端能實現;B做服務器,A做客戶端,A就不能連接到B。我換了一臺電腦A就能實現通信了。應該是A的防火牆需要設置。但是A的防火牆全關了也不能實現。真是很讓人搞不懂。
首先是服務器端代碼:
# -*- encoding: utf-8 -*-
import socket
IP = "192.168.1.153" #服務器端可以寫"localhost",可以爲空字符串"",可以爲本機IP地址
port = 40005 #端口號
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((IP,port))
s.listen(1)
print('listen at port :',port)
conn,addr = s.accept()
print('connected by',addr)
while True:
data = conn.recv(1024)
data = data.decode()#解碼
if not data:
break
print('recieved message:',data)
send = raw_input('return:')#python27要寫raw_input,python3.X可寫input
conn.sendall(send.encode())#再編碼發送
conn.close()
s.close()
客戶端代碼:
# -*- encoding: utf-8 -*-
import socket
import sys
IP = '192.168.1.153' #填寫服務器端的IP地址
port = 40005 #端口號必須一致
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((IP,port))
except Exception as e:
print('server not find or not open')
sys.exit()
while True:
trigger = raw_input("send:")
s.sendall(trigger.encode())
data = s.recv(1024)
data = data.decode()
print('recieved:',data)
if trigger.lower() == '1':#發送1結束連接
break
s.close()