socket python 连接 java_linux 下 python 和 java, socket通讯问题。

一个小程序,服务端terminal1里运行一个25*25的地图,给客户端传送24个字节的视野信息。

客户端terminal2里是agent,一个5*5的视野。

老师给的是java版的。客户端和服务端tcp连接。

因为不熟悉java 我用python写客户端。但接受5*5的数据总是有问题。

比如最开始接受的数据是长度为1的空byte类型。之后每次显示的5*5视野都比原来的慢2步。想问下是哪地方出了问题。

map:

~~ T> T k ~~

~~ ~~* *~~ ~~

~~*-* *-*~~

~~ ** ** ~~

~~ g ** ** a ~~

~~ * * ~~

view

+-----+

| T |

|~* |

| ^ |

| |

|* |

+-----+

23

1

23

24

接受的数据按道理长度应该是24,

但实际接受的数据长度分别是23,1,23,24。好像是24被分成了23和1。用java版的

agent就没这个问题。

这是java的服务端输出的代码:

InputStream in = null;

OutputStream out = null;

ServerSocket serverSocket = null;

Socket clientSocket = null;

int i,j;

try {

serverSocket = new ServerSocket( port );

clientSocket = serverSocket.accept();

serverSocket.close();

in = clientSocket.getInputStream();

out = clientSocket.getOutputStream();

}

catch( IOException e ) {

swanSong( "Could not listen on port: "+ port );

}

try {

for( m=1; m <= maxmoves; m++ ) {

stepping.get_view();

for( i=0; i < 5; i++ ) {

for( j=0; j < 5; j++ ) {

if( !(( i == 2 )&&( j == 2 ))) {

out.write( stepping.view[i][j] );

}

}

}

out.flush();

action = (char) in.read();

这是java版正确的agent代码:

try { // scan 5-by-5 wintow around current location

while( true ) {

for( i=0; i < 5; i++ ) {

for( j=0; j < 5; j++ ) {

if( !(( i == 2 )&&( j == 2 ))) {

ch = in.read();

if( ch == -1 ) {

System.exit(-1);

}

view[i][j] = (char) ch;

}

}

}

agent.print_view( view ); // COMMENT THIS OUT BEFORE SUBMISSION

action = agent.get_action( view );

out.write( action );

}

}

这是我的python代码

import socket

HOST = 'localhost'

PORT = 31415

ADDR = (HOST, PORT)

sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

sock.connect(ADDR)

while True:

action = input("dirtion:")

sock.send(action.encode())

data = sock.recv(24).decode()

a = 0

if len(data)>23:

for i in range(5):

for j in range(5):

if len(data)> 23 and i !=2 or j != 2:

print(data[a],end='')

a += 1

else:

print('^',end='')

print()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值