2017-08-07 133 views
-2

执行后,我在客户端键入文件名,但没有打印到服务器端。已经尝试了一切。请帮忙。我在Windows中使用bash。我只是从客户端发送文件名到服务器。服务器端将显示客户端。消息未发送:C套接字

这是我client.c

#include<stdio.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include<string.h> 
#include<netinet/in.h> 
#include<stdlib.h> 
#include<unistd.h> 
    int main() 
    { 
    int i,size,connect_status,sd; 
    char sentmsg[100],recvmsg[100]; 
    int sentlen,sent_status,recvlen,recvbytes; 
    struct sockaddr_in client,address; 
    sd = socket(AF_INET,SOCK_STREAM,0); 
    if(sd == -1) 
    { 
      perror("Socket Error : "); 
      return 0; 
    } 

    client.sin_family = AF_INET; 
    client.sin_port = htons(1543); 
    client.sin_addr.s_addr = INADDR_ANY; 
    for(i=0; i<8;i++) 
    { 
      client.sin_zero[i] = '\0'; 
    } 
    connect_status = connect(sd,(struct sockaddr*)&client,sizeof(struct sockaddr)); 
    if(connect_status == -1) 
    { 
      perror("Connect Error : "); 
      return 0; 
    } 
    printf("\nEnter the file name to be read : "); 
    scanf("%s",sentmsg); 
    sent_status = send(sd,sentmsg,100,0); 
    if(sent_status == -1) 
    { 
      perror("Sending Error : "); 
      return 0; 
    } 

    return 0; 
    } 

这是我server.c

#include<stdio.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include<string.h> 
#include<netinet/in.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<fcntl.h> 
#include<sys/stat.h> 
int main() 
{ 
    int i,newsd,sd,size,listen_status,bind_status,fd; 
    char sentmsg[100],recvmsg[100]; 
    int sent_status,rec_status,sentlen,recvlen; 
    struct sockaddr_in server,address; 
    sd = socket(AF_INET,SOCK_STREAM,0); 
    if(sd == -1) 
    { 
      perror("Socket Error : "); 
      return 0; 
    } 
    server.sin_family = AF_INET; 
    server.sin_port = htons(1534); 
    server.sin_addr.s_addr = INADDR_ANY; 
    for(i=0 ; i<8 ; i++) 
    { 
      server.sin_zero[i] = '\0'; 
    } 
    bind_status = bind(sd,(struct sockaddr*)&server,sizeof(struct sockaddr)); 
    if(bind_status == -1) 
    { 
      perror("\nBind Error : "); 
      return 0; 
    } 
    listen_status = listen(sd,5); 
    if(listen_status == -1) 
    { 
      perror("\nListen Error : "); 
      return 0; 
    } 
    size = sizeof(struct sockaddr_in); 
    newsd = accept(sd,(struct sockaddr*)&address,&size); 
    if(newsd == -1) 
      { 
      perror("\nAccept Error : "); 
      return 0; 
    } 
    rec_status = recv(newsd,recvmsg,recvlen,0); 
    if(rec_status == -1) 
    { 
      perror("\nRecieve Error : "); 
      return 0; 
    } 
    recvmsg[rec_status] = '\0'; 
    printf("\nClient : %s",recvmsg); 
    return 0; 
} 

我unabble从客户端发送消息到服务器。请帮忙

+0

拒绝连接意味着服务器主动拒绝连接请求。该端口是可访问的,但没有服务器进程限制。 –

+0

那么我需要做什么? –

+2

我对C中的网络通信一无所知,但这是一个常见的错误。你已经在客户机中定义了'client.sin_port = htons(1543);'但在服务器中,'server.sin_port = htons(1534);'这对你来说看起来是否正确?还是应该是同一个端口? –

回答

0

这是因为你没有初始化recvlen。 将其设置为接收缓冲区长度,它将工作:

recvlen = 100; 
rec_status = recv(newsd,recvmsg,recvlen,0);