嘿,社区,我有下面的ServerSocket,它应该监听端口53000并记录任何接收到的数据。但是,我似乎无法通过server.accept()阻塞调用。
public void run() {
SocketServer server = new ServerSocket(53000);
//---buffer store for the stream---
byte[] buffer = new byte[1024];
//---bytes returned from read()---
int bytes;
//---keep listening to the InputStream until an
// exception occurs---
while (true) {
try {
socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = in.readLine();
Log.i("received response from server", str);
in.close();
socket.close();
} catch (IOException e) {
Log.e(TAG, e.getMessage());
} catch (Exception e){
server.close();
Log.e(TAG, e.getMessage());
}
}
}我还在Manifest文件中为应用程序提供了INTERNET权限。()
更令人费解的是,我还验证了客户端响应是否发送到该端口。
有什么特别需要我做的吗?
谢谢。
发布于 2012-06-20 03:22:04
你的代码非常混乱,甚至不能编译。我做了一些调整,这样我就可以测试你的代码了,它工作得很好。下面是我使用的测试应用程序:
package com.test.stackoverflow
import java.io.BufferedReader;
public class ServerSocketTestActivity extends Activity {
/** Called when the activity is first created. */
private static String TAG = "ServerSocketTest";
private ServerSocket server;
Runnable conn = new Runnable() {
public void run() {
try {
server = new ServerSocket(53000);
while (true) {
Socket socket = server.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String str = in.readLine();
Log.i("received response from server", str);
in.close();
socket.close();
}
} catch (IOException e) {
Log.e(TAG, e.getMessage());
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(conn).start();
}
@Override
protected void onPause() {
super.onPause();
if (server != null) {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}使用这段代码和通过adb shell运行的netcat,我能够连接并与应用程序通信。
发布于 2013-11-21 13:19:14
在使用客户端时,声明这些方法以访问流
// gets the input stream // ObjectInputStream input;
// gets the output stream // ObjectOutputStream output;
// ServerSocket server;
// Socket connection;也许你有另一个访问套接字的类;
server = new ServerSocket(5001, 100);//步骤1创建套接字连接服务器=新的ServerSocket(5001,100);while(条件为真)
// step 2等待连接
// step 3获取流
//第四步:处理连接
//步骤5:关闭连接
https://stackoverflow.com/questions/11107258
复制相似问题