请问python服务端已写,对应怎么写java客户端?

rumusanfen 2015-09-25 11:50:11

import SocketServer
import traceback
class ServerHandler(SocketServer.StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print("client connect,address:",addr)
#self.wfile.write("this is server")
#self.request.send("this is server")
while True:
try:
#data = self.rfile.readline()strip()
data = self.request.recv(1024)
print(data)
except:
traceback.print_exc()
break
server = SocketServer.ThreadingTCPServer(('',6000),ServerHandler)
server.serve_forever()

以上是我写的服务端,和python的客户端可以匹配连接通讯,但是java的客户端一连就出错,java客户端如下。

package ClientTest;

import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;

public class ClientTest {
public static void main(String args[]) throws Exception {
//为了简单起见,所有的异常都直接往外抛
String host = "172.26.180.6";//要连接的服务端IP地址
int port = 6000;//要连接的服务端对应的监听端口
Socket client = new Socket(host,port);
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Server.");
writer.flush();//写完后要记得flush
writer.close();
client.close();
}
}


我找到一个相关的例子是python服务端,android客户端,而python用的是socket,而不是SocketServer,是不是SocketServer不适合用于与其他语言写的客户端建立连接,需要用socket来写?
参考页面:http://www.jb51.net/article/57339.htm
...全文
299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumusanfen 2015-09-28
  • 打赏
  • 举报
回复

import SocketServer
import traceback
import sys
import RPi.GPIO as gpio
class ServerHandler(SocketServer.StreamRequestHandler):
        gpio.setmode(gpio.BOARD)
        def handle(self):
                addr = self.request.getpeername()
                print("client connect,address:",addr)
                #self.wfile.write("this is server")
                #self.request.send("this is server")
                gpio.setup(11,gpio.OUT)
                while True:
                        try:
                                #data = self.rfile.readline()strip()
                                data = self.request.recv(1024)
                                if not data:
                                        break
                                if data == 'close':
                                        server.shutdown()
                                        gpio.setup(11,gpio.IN)
                                        sys.exit()
                                if data == 'high':
                                        gpio.output(11,gpio.HIGH)
                                if data == 'low':
                                        gpio.output(11,gpio.LOW)
                                print(data)
                        except:
                                traceback.print_exc()
                                break
server = SocketServer.ThreadingTCPServer(('',6000),ServerHandler)
server.serve_forever()
rick-he 2015-09-27
  • 打赏
  • 举报
回复
引用 8 楼 rumusanfen 的回复:
我的思路是,在data = self.request.recv(1024)前判断连接是否健在,如果发现java客户端已经close,break出while 可是为啥python客户端关闭,服务端就能抛出异常呢,折腾人
你python端怎么写的?
rick-he 2015-09-26
  • 打赏
  • 举报
回复
是什么错误?
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
我的思路是,在data = self.request.recv(1024)前判断连接是否健在,如果发现java客户端已经close,break出while 可是为啥python客户端关闭,服务端就能抛出异常呢,折腾人
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
现在我感觉是while以后, java客户端发送后,socket close后python端的data = self.request.recv(1024)没有阻塞住,而data就成了空,然后就不停循环在打印空的data...
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
引用 5 楼 u011575570 的回复:
[quote=引用 4 楼 rumusanfen 的回复:] 还有...我试了下,去掉while后,python客户端就不能重复send()发送信息了,只有第一次发送有效,第二次无效,第三次就报10053错误了,而java客户端却可以重复发送信息。
你给while设置个大小while i<10这样查看下。 python客户端就不能重复send()发送信息了,这应该是对的。 java客户端却可以重复发送信息那服务端能够收到信息吗?[/quote] 试了i=1 while i<10 i=i+1再try,刷几行是可以正常了。 java客户端这样子没问题,能接受到两行信息。 writer.write("Hello Server1."); writer.flush(); writer.write("\nHello Server2."); writer.flush();
rick-he 2015-09-26
  • 打赏
  • 举报
回复
引用 4 楼 rumusanfen 的回复:
还有...我试了下,去掉while后,python客户端就不能重复send()发送信息了,只有第一次发送有效,第二次无效,第三次就报10053错误了,而java客户端却可以重复发送信息。
你给while设置个大小while i<10这样查看下。 python客户端就不能重复send()发送信息了,这应该是对的。 java客户端却可以重复发送信息那服务端能够收到信息吗?
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
还有...我试了下,去掉while后,python客户端就不能重复send()发送信息了,只有第一次发送有效,第二次无效,第三次就报10053错误了,而java客户端却可以重复发送信息。
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
今天晚上我把树莓派连上显示器后,发现问题依旧,于是我注释掉了while:try,就没报错了...求讲解...
rumusanfen 2015-09-26
  • 打赏
  • 举报
回复
引用 1 楼 u011575570 的回复:
是什么错误?
是这样,我python环境是树莓派,raspbian,java环境是win7 x64 & JDK 1.70u80, ssh连接树莓派运行服务端,然后运行java代码,ssh上就刷不见,ctrl+c都没用,只能关掉,感觉在跑循环却又没执行break... 我晚上把树莓派接上显示器看看究竟

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧