下面的代码是客户端,服务器端是二进制格式,因此无法修改服务器端。我只能修改客户端。客户端和服务器分别向对方发送消息。
我从http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm获取示例代码并稍作修改。它可以编译。当多个客户端连接到服务器时,在某些情况下客户端可以从套接字读取,但是,在某些情况下客户端无法读取来自socket。换句话说,在行
n = read(sockfd,buffer_reader,255);
此时正在运行并且正在运行 它正在等待,没有给出任何错误。我找不到任何理由 虽然在两种情况下都有时起作用,但它有时不起作用 将由服务器发送的消息是相同的。我找不到任何东西 导致这个问题,所以无法产生任何解决方案 这是代码。可能是什么问题?什么可能导致这个问题?
#include <string.h>
#include <cstring>
#include <unistd.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <strings.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <vector>
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
u sing namespace std;
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
unsigned char hash[20];
int src[2] ;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[3]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(argv[2]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; //classic
bcopy((char *)server-> h_addr,
(char *)&serv_addr.sin_addr.s_addr, server->h_length );
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
while(1)
{
printf("Please enter the message: ");
bzero(buffer_reader,256);
fgets(buffer_reader,255,stdin);
n = write(sockfd,buffer_reader,strlen(buffer_reader));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer_reader,256);
n = read(sockfd,buffer_reader,255); //problem arise here. Stacked here
if (n < 0)
error("ERROR writing to socket");
printf("The incoming message: %s",buffer_reader);
}
close(sockfd);
return 0;
}