Java 使用插座连接电脑时出现问题
我正在尝试使用WiFi连接我的手机和笔记本电脑。两个设备都连接到一个网络。笔记本电脑的IP是192.168.1.35,所以我试着通过智能手机连接这个IP(防火墙关闭)。代码如下:Java 使用插座连接电脑时出现问题,java,android,python,Java,Android,Python,我正在尝试使用WiFi连接我的手机和笔记本电脑。两个设备都连接到一个网络。笔记本电脑的IP是192.168.1.35,所以我试着通过智能手机连接这个IP(防火墙关闭)。代码如下: package org.me.androidapp; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import java.io.BufferedWriter; import java.io.IO
package org.me.androidapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
try {
Toast.makeText(this.getApplicationContext(), "OK", Toast.LENGTH_LONG).show();
Socket socket = new Socket("192.168.1.35", 9999);
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println("dupa");
socket.close();
} catch (UnknownHostException ex) {
Toast.makeText(this.getApplicationContext(), "Nie odnaleziono hosta", Toast.LENGTH_LONG).show();
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Toast.makeText(this.getApplicationContext(), ex.toString(), Toast.LENGTH_LONG).show();
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Im使用以下代码(用python编写)作为服务器:
import socket
_connector = None
_running = True
_host = 'localhost'
_port = '9999'
_maxClient = 999
debug = True
_policyFile = '<?xml version="1.0" encoding="UTF-8"?><cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd"><allow-access-from domain="*" to-ports="*" secure="false" /><site-control permitted-cross-domain-policies="master-only" /></cross-domain-policy>'
## Trace debugging messages.
# @param aString String to be printed.
def printd( aString ):
if debug:
print aString
_connector = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
_connector.bind ( ( str(_host), int(_port) ) )
_connector.listen ( int(_maxClient) )
_running = True
while _running:
printd('Running on port ' + _port + ' ... ')
channel, details = _connector.accept()
if _running:
printd( 'New connection with: ' + str(details) )
channel.setblocking( 1 )
recvData = channel.recv(2000)
if("policy-file-request" in recvData):
channel.send(_policyFile)
printd( 'host: ' + str(details[0]) )
printd( 'port: ' + str(details[1]) )
printd( 'port: ' + str(int(details[1])) )
channel.close()
导入套接字
_连接器=无
_运行=真
_主机='localhost'
_端口='9999'
_maxClient=999
调试=真
_策略文件=“”
##跟踪调试消息。
#要打印的@param aString字符串。
def打印D(收缩):
如果调试:
印花套圈
_连接器=socket.socket(socket.AF\u INET,socket.SOCK\u流)
_connector.bind((str(_host),int(_port)))
_connector.listen(int(_maxClient))
_运行=真
运行时:
printd('在端口'+\'上运行端口+'…')
通道,详细信息=_connector.accept()
如果正在运行:
printd('newconnection with:'+str(详细信息))
通道锁定(1)
recvData=channel.recv(2000)
如果(recvData中的“策略文件请求”):
channel.send(_策略文件)
printd('host:'+str(详细信息[0]))
printd('port:'+str(详细信息[1]))
printd('port:'+str(int(详细信息[1]))
频道关闭()
我正在手机上测试这个应用,因为我不知道如何配置emulator(有帮助吗?:))。手机显示错误“Java.Net.ConnectionError localhost/192.168.1.1:9999-连接被拒绝”。我也想知道为什么它显示IP 192.168.1.1
请帮忙,
Chris您的python代码绑定到本地主机,这意味着它不在网络上侦听,而只在环回上侦听,因此您应该将其更改为在网络地址(即192.168.1.35)上侦听您的python代码绑定到本地主机,这意味着它不在网络上侦听,而只在环回上侦听,因此您应该将其更改为在计算机的网络地址(即192.168.1.35)而不是127.0.0.1上侦听。您的python服务器对我来说运行正常(提示:
telnet localhost 9999
是一种很好的检查方法)。我们可以从logcat查看堆栈跟踪吗?您的python服务器对我来说工作正常(提示:telnet localhost 9999
是一种很好的检查方法)。我们可以从logcat中查看堆栈跟踪吗?很好,作为替代,您可以绑定到0.0.0.0,我发现它更简单、更健壮。好的,第二个问题是处理android应用程序,但我解决了。9999端口还没有准备好使用,我更改了端口,现在一切正常:)谢谢!好的,作为一种替代,你可以绑定到0.0.0.0,我发现它更简单、更健壮。好的,第二个问题是处理android应用程序,但我解决了它。9999端口未准备好使用,我更改了端口,现在一切正常:)谢谢!