2012-01-10 28 views
1

私はcサーバとクライアントをjavaに入れていますが、動作しません。
1.実行サーバ、クライアント
2.実行クライアント用サーバー待機 - クライアントは、文字列
3.サーバーが//私はこのことを期待するが、
サーバがいくつか間違った文字
を取得モミの文字を取得し、それをインクリメントし、クライアントに送信送信 4.client文字を取得し、//これを期待して、画面上にそれを書きますが、クライアントは、この
例外で失敗:
CクライアントのTCPサーバとjava通信

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プロトコルを使用します。

サーバー:Javaで

#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を使用する他のJavaプログラムとのObjectOutputStream使用することができます。 JavaのシリアライズフォーマットをサポートするCプログラムを想像するのは難しいです。

テキストを書きたい場合、私はあなたがたPrintWriter/BufferedReaderのを使用することをお勧めまたはよりよい解決策は、あなたがすべてのエラーを表示して(なBufferedOutputStreamを使用して、独自のエンコードを行うことです。

0

、Uは(oos.flush使用する必要があります) writeObject()メソッドの後。

関連する問題