2012-01-10 2 views
1

나는 c와 클라이언트가 java에 있지만 작동하지 않는다.
1. 실행 서버, 클라이언트
2. 실행 클라이언트에 대한 서버 대기는 - 클라이언트는 서버가 전나무 문자를 얻고 그것을 증가 및 클라이언트에 보내 // 나는이 기대하지만
서버가 일부 잘못된 문자를 가져옵니다
3. 문자열을 전송
문자를 얻고 //이 기대 화면에 쓸 수 있지만 클라이언트는이
예외와 함께 실패 4.client :
자바 클라이언트에서 TCP 서버가

Exception in thread "main" java.net.SocketException: Connection reset 
     at java.net.SocketInputStream.read(SocketInputStream.java:168) 
     at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266) 
     at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279) 
     at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) 
     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) 
     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) 
     at clientTCP.main(clientTCP.java:19) 

클라이언트가 끝나야 5)와 서버 계속 실행 //하지만 클라이언트는 이전 후 추락 예외

누가 문제가 될 수 있는지 아는 사람 있습니까? 서버, 클라이언트는 TCP 프로토콜을 사용합니다.

서버 : 자바

#include <sys/types.h> 
#include <sys/socket.h> 
#include <stdio.h> 
#include <sys/un.h> 
#include <unistd.h> 
#include <netinet/in.h> 
#include <unistd.h> 
#include <signal.h> 
#include <stdlib.h> 

int main() 
{ 
    int server_sockfd, client_sockfd; 
    int server_len, client_len; 
    struct sockaddr_in server_address; 
    struct sockaddr_in client_address; 


    server_sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    server_address.sin_family = AF_INET; 
    server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); 
    server_address.sin_port = htons(10000); 

    server_len = sizeof(server_address); 

     if(bind(server_sockfd, (struct sockaddr *)&server_address, server_len) != 0) 
     { 
       perror("oops: server-tcp-single"); 
       exit(1); 
     } 

    listen(server_sockfd, 5); 

    signal(SIGCHLD, SIG_IGN); 

    while(1) 
    { 
     char ch; 
     printf("server wait...\n"); 

     client_len = sizeof(client_address); 
     client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); 

     printf("Client connected \n"); 

     if(fork() == 0) 
     { 
      read(client_sockfd, &ch, 1); 
      printf("Client send = %c\n", ch); 

      ch++; 

      sleep(5); 

      printf("Server send = %c\n", ch); 
      write(client_sockfd, &ch, 1); 
      close(client_sockfd); 
      exit (0); 
     } 
     else 
      close(client_sockfd); 

    } 
} 

클라이언트 :

import java.io.*; 
import java.net.*; 

class clientTCP 
{ 
public static void main(String argv[]) throws Exception 
{ 
    String sentence; 
    String modifiedSentence; 
    Socket socket = new Socket("127.0.0.1", 10000); 
    InetAddress adresa = socket.getInetAddress(); //address 
    System.out.print("Connecting on : "+adresa.getHostAddress()+" with hostname : "+adresa.getHostName()+"\n"); 


    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 
           oos.writeObject("HalloXXXX"); 


           ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
           String message = (String) ois.readObject(); 
           System.out.println("Message Received: " + message); 
           ois.close(); 
           oos.close(); 
           socket.close(); 
} 
} 

답변

3

당신은 또한 그것을 읽을의 ObjectInputStream를 사용하는 다른 자바 프로그램과 ObjectOutputStream를 사용할 수 있습니다. Java 직렬화 형식을 지원하는 C 프로그램을 상상하기 란 어렵습니다. 당신은 내가 당신의 PrintWriter/BufferedReader로 사용하는 것이 좋습니다 텍스트를 작성하려면 또는 더 나은 솔루션의 BufferedOutputStream를 사용하고 자신의 인코딩을 할 경우

(그래서) (당신은

0

. 모든 오류를보고 u는 oos.flush 사용해야합니다 writeObject() 메서드 다음에.

관련 문제