我想從Java服務器向C客戶端發送整數和字符串。我可以讀取整數,但讀取字符串時遇到問題。這是Java無法通過套接字接收字符串
ClientNumber++;
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//dos.flush();
dos.writeInt(ClientNumber);
String randomString= getRandomValue(10,20);
dos.writeUTF(randomString);
這是C客戶端代碼我的服務器代碼:
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 = htonl(6);
int reply = 0;
if(send(to_server_socket, &value, sizeof(value), 0) != sizeof(value))
{
printf("socket write failed");
exit(-1);
}
if(recv(to_server_socket, &reply, sizeof(reply), MSG_WAITALL) != sizeof(reply))
{
printf("socket read failed");
exit(-1);
}
printf("got reply: %d\n", ntohl(reply));
char myString[30] = "";
ssize_t nbytes=0;
if ((nbytes = recv(to_server_socket, myString, sizeof(myString), 0)) < 0)
{
perror("recv");
exit(1);
}
myString[nbytes - 1] = '\0';
printf("Recived String : %s",myString);
}
結果我得到了我的號碼,然後「套接字讀取失敗的字符串」的消息。 如果我不這樣做測試過我沒有任何結果
char myString[20] = "";
recv(to_server_socket, &myString, sizeof(myString), 0);
您可以使用WireShark或其他軟件監視網絡流量,並檢查字符串是否正確傳遞? – Pietu1998 2013-05-04 12:08:57
與java客戶端它的工作完美 – user2328999 2013-05-04 12:10:41
您的錯誤檢查不_look_有效的字符串大小寫。爲什麼發送的字符串長達30個字符? – Mat 2013-05-04 12:10:48