套接字通信,Java客户端C服务器

我试图通过套接字与Java客户端和C服务器进行通信如果我在命令行上使用nc来连接或者使用nc作为服务器并与我的Java客户端连接,那么似乎工作正常尝试连接Java客户端和C服务器它不起作用。

客户端启动连接,并发送消息,服务器收到消息,但服务器的响应永远不会到达客户端。

服务器代码:

#include  #include  #include  #include  #include  #include  int main( int argc, char *argv[] ) { int sockfd, clisockfd, portno; char * start = "hello"; char * end = "bye"; socklen_t clilen; char buffer[256]; char contentBuffer[255]; struct sockaddr_in serv_addr, cli_addr; int n; //int optval; /* First call to socket() function */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("ERROR opening socket"); return(1); } /* Initialize socket structure */ bzero((char *) &serv_addr, sizeof(serv_addr)); portno = 5000; 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) { perror("ERROR on binding"); return(1); } listen(sockfd,5); clilen = (socklen_t) sizeof(cli_addr); clisockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); if (clisockfd < 0) { perror("ERROR on accept"); return(1); } while (strcmp(end, contentBuffer) !=0) { bzero(buffer,256); bzero(contentBuffer,255); /* If connection is established then start communicating */ n = read( clisockfd,buffer,255 ); if (n < 0) { perror("ERROR reading from socket"); return(1); } strncpy(contentBuffer,buffer,strlen(buffer) - 1); if (strcmp(start, contentBuffer) ==0) { printf("command: %s\n",buffer); n = write(clisockfd,"Roger that",11); if (n < 0) { perror("ERROR writing to socket"); return(1); } } else { printf("Unknown command: %s\n",buffer); n = write(clisockfd,"ERRCmd",7); if (n < 0) { perror("ERROR writing to socket"); return(1); } } } close(sockfd); return 0; } 

客户代码

 import java.io.*; import java.net.*; public class Cliente { public static void main(String[] args) throws IOException { if (args.length != 2) { System.err.println( "Usage: java EchoClient  "); System.exit(1); } String hostName = args[0]; int portNumber = Integer.parseInt(args[1]); Socket firstSocket = new Socket(hostName, portNumber); PrintWriter out = new PrintWriter(firstSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(firstSocket.getInputStream())); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("received: " + in.readLine()); } in.close(); stdIn.close(); firstSocket.close(); } } 

readLine()阻塞,直到连接已shutdown()close() d或它收到一个新行\n ,它永远不会被服务器发送。