我正在创建2个套接字。客户端是一个Android应用,服务器代码是用C ++编写的。
要创建套接字: 在应用中:
socket = new Socket("192.168.1.1", 5026);
socket1 = new Socket("192.168.1.1", 5050);
在服务器端:
int sock::create_sock(int port_no, bool blocking)
{
int sockfd, newsockfd;
int portno = port_no;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
int n;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
int enable = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0)
error("setsockopt(SO_REUSEADDR) failed");
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd, 5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
if (blocking == false)
{
fcntl(newsockfd, F_SETFL, O_NONBLOCK); // Change the socket into non-blocking state
cout << "Creating non-blocking socket " << endl;
}
printf("server: got connection from %s port %d\n", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port));
close(sockfd);
return newsockfd;
}
应用程序中有一个连接按钮。单击该按钮后,对运行Java代码的套接字进行创建。
现在问题是该应用程序在模拟器中运行良好。无论我按多少次连接,两个插座都已连接。但是当我在移动设备上运行时,它只能连接一次。在随后单击连接按钮时,仅创建第一个套接字,第二个套接字停止,然后再接受服务器中的功能。