pythonjava app切出后无网络连接_写了一个java的Server 用python的client访问却访问不通问题。...

首先给出这个java的Server代码

try{//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口

ServerSocket serverSocket=new ServerSocket(8899);

Socket socket;

System.out.println("***服务器即将启动,等待客户端的连接***");//循环监听等待客户端的连接

while(true){//调用accept()方法开始监听,等待客户端的连接

socket=serverSocket.accept();//创建一个新的线程

InputStream is=null;

OutputStream os=null;try{//获取输入流,并读取客户端信息

is =socket.getInputStream();byte[] bb = new byte[8]; //缓冲器

try{while((is.read(bb))!=-1) { //从输入流读取一些字节数,并将它们存储到缓冲区b

System.out.println("服务端收到的字节数组为:");for (int i = 0; i < 8; i++) {

System.out.print(Utils.byteToHex(new byte[]{bb[i]}) + " ");//这里只是转换一下十六进制

}

System.out.println("");

}

}catch(IOException e) {

e.printStackTrace();

}//获取输出流,响应客户端的请求

os =socket.getOutputStream();byte[] b = {0x18, 0x06, 0x00,0x02,0x00,0x10,0x10,0x10};

os.write(b);

socket.shutdownOutput();

}catch(IOException e) {

e.printStackTrace();

}finally{//关闭资源

try{if(os!=null)

os.close();if(is!=null)

is.close();if(socket!=null)

socket.close();

}catch(IOException e) {

e.printStackTrace();

}

}

InetAddress address=socket.getInetAddress();

System.out.println("当前客户端的IP:"+address.getHostAddress());

}

}catch(IOException e) {

e.printStackTrace();

}

Utils类下面的 byteToHex

/*** byte数组转hex

*@parambytes

*@return

*/

public static String byteToHex(byte[] bytes){

String strHex= "";

StringBuilder sb= new StringBuilder("");for (int n = 0; n < bytes.length; n++) {

strHex= Integer.toHexString(bytes[n] & 0xFF);

sb.append((strHex.length()== 1) ? "0" + strHex : strHex); //每个字节由两个字符表示,位数不够,高位补0

}returnsb.toString().trim();

}

然后把这个server接入python的客户端的访问的时候 说我这个server没有给其响应。

我在想是不是我这个server的响应有问题,流的关闭 连接的关闭等有问题。

就自己写了一个java的client来测试一下

public static void main(String[] args) throwsException{try{//1.创建客户端Socket,指定服务器地址和端口 192.168.1.7

Socket socket=new Socket("192.168.1.7", 8899);//2.获取输出流,向服务器端发送信息

OutputStream os=socket.getOutputStream();//字节输出流//关灯光

byte[] b = {0x18,0x06,0x00,0x02,0x00,0x10,0x2B,(byte)0xCF};

os.write(b);

os.flush();

socket.shutdownOutput();//关闭输出流//3.获取输入流,并读取服务器端的响应信息

InputStream is=socket.getInputStream();byte[] bb = new byte[8]; //缓冲器

try{while((is.read(bb))!=-1) { //从输入流读取一些字节数,并将它们存储到缓冲区b

System.out.println("客户端收到的字节数组为:");for (int i = 0; i < 8; i++) {

System.out.print(Utils.byteToHex(new byte[]{bb[i]}) + " ");

}

System.out.println("");

}

}catch(IOException e) {

e.printStackTrace();

}//4.关闭资源

is.close();

os.close();

socket.close();

}catch(Exception e) {

e.printStackTrace();

}

}

然后先后启动 server和client 注意适当修改端口以及ip

server端的日志如下:

***服务器即将启动,等待客户端的连接***

服务端收到的字节数组为:

18 06 00 02 00 10 2b cf

当前客户端的IP:192.168.1.7

client端的日志如下:

客户端收到的字节数组为:

18 06 00 02 00 10 10 10

明明就是没有问题的。为什么非要说java的socketserver有问题呢?

然后我就用python写了一个client 代码细节不是太理解 抄网络上面的。python3.7

importsocketimportbinascii

HOST= '192.168.1.7'PORT= 50007s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))#!开灯 Received b'1806000300207a1b'

request = bytes([0x18, 0x06, 0x00, 0x03,0x00, 0x20, 0x7A, 0x1B])

s.sendall(request)

response= s.recv(1024)print('Received', response)

然后适当修改java server和python client的ip port保持一致 先后启动java的server 和 python的client.

java server日志如下:

***服务器即将启动,等待客户端的连接***

服务端收到的字节数组为:

18 06 00 03 00 20 7a 1b

python client端确实没有日志输出。

这个时候我想验证一下python client是否有问题。然后我写了一个python server 这个也是抄网上的。

import socket

import binascii

HOST = ''

PORT = 50007

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

s.bind((HOST, PORT))

s.listen(5)

while True:

conn, address = s.accept()

request = conn.recv(1024)

print('Connected by', repr(address),

'Received ', binascii.hexlify(request))

if request:

conn.sendall(request)

修改python client 和python server的端口和ip 保持一致 先后启动python server python client。

python server端显示:

Connected by ('192.168.1.7', 31831) Received b'1806000300207a1b'

python的client端日志输出:

Received b'\x18\x06\x00\x03\x00 z\x1b'

这样是不是证明了

java的socketServer不能提供给python client的访问?

整个流程都是请求和响应字节数组。

大家有什么想法,这个是什么问题?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值