为了实现nao机器人与电脑端的tcp通信,于是研究了一下python实现tcp通信,在网上也看到了很多例子,但大多都是在一台机器上验证。在两台机器上使用,出了一些小故障。
注意:若两台电脑通信出了问题,若能ping通!大部分是防火墙的问题。一开始a做服务器,b做客户端能实现;b做服务器,a做客户端,a就不能连接到b。我换了一台电脑a就能实现通信了。应该是a的防火墙需要设置。但是a的防火墙全关了也不能实现。真是很让人搞不懂。
首先是服务器端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- 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()
|
客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- 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()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ADwenwen/article/details/79031085