我是Linux新手,我嘗試創建一個服務器。我打開了接受方法。客戶端嘗試連接,但沒有任何反應!我不知道爲什麼。想幫助我嗎?我的c服務器不接受爲什麼?
服務器端:
int main(int argc, char *argv[])
{
int len,err,port;
if(argc != 2) {
exit(1);
}
initSem();
port = atoi(argv[1]);
initSocket(port);
printf("server fd: %d.\n", serverFd);
len = sizeof(struct sockaddr_in);
printf("len: %d\n",len);
clientsFd[counterThread] = accept(serverFd,
(struct sockaddr*)&clientsAddress[counterThread],
(socklen_t*)&len);
printf("new client:: %d", clientsFd[counterThread]);
if(clientsFd[counterThread] == -1) {
perror("can't connect to new client.");
exit(1);
}
return 0;
}
void initSocket(int port)
{
erverFd = socket(AF_INET, SOCK_STREAM, 0);
serverAdrees rees.sin_addr.s_addr = INADDR_ANY;
serverAdrees.sin_port = htons(port);
bind(serverFd, (struct sockaddr*)&serverAdrees, (socklen_t)sizeof(struct sockaddr_in));
listen(serverFd, MAX_CLIENTS);
}
客戶端:
int main(int argc, char *argv[])
{
int err,len,port;
struct sockaddr_in serverAddr;
char massageBuf[MAX_MASSAGE];
pthread_t readThread;
if(argc != 3) {
perror("no arguments..\n");
return 1;
}
if((serverFd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("\n Error : Could not create socket \n");
return 1;
}
printf("server fd: %d.\n", serverFd);
serverAddr.sin_family = AF_INET;
port = atoi(argv[2]);
serverAddr.sin_port = htons(port);
printf("addr: %s .\n", argv[1]);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("before connect\n");
if(connect(serverFd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
{
perror("\n Error : Connect Failed \n");
return 1;
}
printf("after connect \n");
while (1) {
scanf("%s", massageBuf);
printf("%s \n", massageBuf);
if(-1 == write(serverFd, massageBuf, strlen(massageBuf))) {
perror("\n Error : write to server Failed \n");
return 1;
}
if(!strcmp(massageBuf,"close")) {
exit(1);
return 0;
您應該檢查每個與套接字相關的系統調用的結果(套接字,綁定,偵聽,接受,連接),然後您將知道哪一個失敗。 (很可能你的'bind'失敗了,因爲你沒有對'ServerAddress'結構進行清零操作,或者也許這個端口正忙)。如果你打算在Linux下繼續編程,那麼按照規則:總是檢查系統的結果或者可能會以某種方式失敗的庫函數(呃,我不鼓勵檢查'printf'的結果,但是大多數應該被檢查)。 – Inspired
請縮進您的代碼以使其可讀。然後請將其降低到顯示問題的最簡單的**代碼。 –