【发布时间】:2014-02-20 11:19:11
【问题描述】:
我找不到关于这个非常具体的问题的任何信息,但也许其他人已经这样做了。
我有一个用 C 编写的服务器程序(为了便于阅读,删除了错误检查):
int main(int arc, char *argv[])
{
int sockfd, newsockfd, portnum, cli_len, num_chars, n;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
// Set up the socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// Set up our variables
bzero((char *) &serv_addr, sizeof(serv_addr));
portnum = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portnum); // Convert from host port to network port
serv_addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("Socket could not be bound");
listen(sockfd, 5); // Get ready to receive connections
cli_len = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &cli_len);
// Message processing
return 0;
}
同时,我有 Android 客户端(版本 4.1.2):
private class ClientTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
try {
InetAddress a = InetAddress.getByAddress(new byte[] {(byte) 192, (byte) 168, 1, (byte) 102});
sock = new Socket(a, 65053);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));
DataOutputStream outToServer = new DataOutputStream(sock.getOutputStream());
// Message processing
} catch (UnknownHostException e) {
System.out.println("No address found for ");
} catch (IOException e) {
System.out.println("Failed to open socket");
}
return null;
}
}
我遇到的问题是 Android 客户端无法打开套接字。超时后我总是收到“无法打开套接字”。 android客户端与我拥有的java服务器一起工作,我拥有的java客户端至少与C服务器建立连接。我不明白可能出了什么问题...
如果您需要更多详细信息或其他代码,请告诉我。
【问题讨论】:
-
您是否在 Manifest 文件中允许互联网连接?
-
@triclosan 是的,因为 Android 客户端可以连接到我第一次尝试的 java 服务器(在我尝试运行 C 服务器的同一台机器上运行)
-
检查服务器上是否有防火墙。