2013-10-24 20 views
8

Tôi đang cố gắng giao tiếp thông qua ổ cắm máy khách Java và máy chủ C Tất cả dường như hoạt động tốt nếu tôi thử máy chủ bằng nc trên dòng lệnh để kết nối hoặc nếu tôi sử dụng nc làm máy chủ và kết nối với máy khách Java của tôi, nhưng khi tôi cố kết nối máy khách Java và máy chủ C thì nó không hoạt động.Giao tiếp ổ cắm, máy khách Java C máy chủ

Máy khách khởi động kết nối và gửi tin nhắn, tin nhắn được máy chủ nhận nhưng sau đó phản hồi của máy chủ không bao giờ xuất hiện cho khách hàng.

server Code:

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <strings.h> 
#include <unistd.h> 

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; 


} 

Khách hàng Mã:

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 <host name> <port number>"); 
      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(); 

    } 
} 

Trả lời

9

readLine() khối đến khi kết nối đã shutdown() hoặc close() d hoặc nó nhận được một mới-line \n, mà không bao giờ được gửi bởi máy chủ.

+0

Cảm ơn bạn đã đăng ký !!! Đó là vấn đề: D – Jebe

+1

@Jebe nếu câu trả lời đó cung cấp cho bạn đúng hướng để giải quyết vấn đề, bạn nên chấp nhận câu trả lời – rkosegi

Các vấn đề liên quan