このコードを使用して、Java クライアントから Java サーバーに整数を送信します
int n = rand.nextInt(50) + 1;
DataOutputStream dos = new DataOutputStream(_socket.getOutputStream());
dos.writeInt(n);
そして、私はこのコードでサーバーでそれを読みました
DataInputStream din = new DataInputStream(socket.getInputStream());
int ClientNumber= din.readInt();
System.out.println(ClientNumber);
ClientNumber++;
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeInt(ClientNumber);
String randomString= getRandomValue(10,20);
dos.writeUTF(randomString);
それは完全に機能しますが、今はCクライアントを書きたいですこのコードを試しました
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVEURNAME "localhost" // adresse IP de mon serveur
int to_server_socket = -1;
void main ( void )
{
char *server_name = SERVEURNAME;
struct sockaddr_in serverSockAddr;
struct hostent *serverHostEnt;
long hostAddr;
long status;
char buffer[512];
bzero(&serverSockAddr,sizeof(serverSockAddr));
hostAddr = inet_addr(SERVEURNAME);
if ( (long)hostAddr != (long)-1)
bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
else
{
serverHostEnt = gethostbyname(SERVEURNAME);
if (serverHostEnt == NULL)
{
printf("gethost rate\n");
exit(0);
}
bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,serverHostEnt->h_length);
}
serverSockAddr.sin_port = htons(8071);
serverSockAddr.sin_family = AF_INET;
/* creation de la socket */
if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("creation socket client ratee\n");
exit(0);
}
/* requete de connexion */
if(connect( to_server_socket,
(struct sockaddr *)&serverSockAddr,
sizeof(serverSockAddr)) < 0 )
{
printf("demande de connection ratee\n");
exit(0);
}
/* envoie de donne et reception */
int value = htons( 4 );
write( to_server_socket, &value, sizeof( value ) );
printf(buffer);
}
しかし、うまくいきません。私はEclipseを使用してJavaコードをコンパイルし、サーバーとCコード(クライアント)のxcodeを実行していますが、問題があるとは思いません
編集:サーバーでエラーが発生しました
java.net.SocketException: java.net.SocketOutputStream.socketWrite0(Native Method) でパイプが壊れています。 java.io.DataOutputStream.writeInt(DataOutputStream.java:182) で ServiceRequest.run(ServiceRequest.java:36) で java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) で java.util. concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
サーバーが整数を待っているためだと思いますが、そうではありません...?