Note that there are some explanatory texts on larger screens.

plurals
  1. PONot receiving messages in TCP client/server program
    primarykey
    data
    text
    <p>I am trying to implement a tcp client and tcp server. I am able to establish the connection but when I send a message from the client, the server doesn't receive it and yes I did look at the previous posts and there were alot of similar problems. I did follow them but I am still getting the same error. The error i am getting is from server side:</p> <pre><code>recv: Socket operation on non-socket </code></pre> <p>Here is my code. If you can please let me know what I am doing wrong, I would really appreciate it. I think there is a problem in my server implementation.</p> <p>Server: </p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;errno.h&gt; #include &lt;string.h&gt; #include &lt;netdb.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;netinet/in.h&gt; #include &lt;arpa/inet.h&gt; #define PORT 3490 #define BACKLOG 10 int main() { struct sockaddr_in server; struct sockaddr_in dest; int status,socket_fd, client_fd,num; socklen_t size; char buffer[10240]; memset(buffer,0,sizeof(buffer)); int yes = 1; if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0))== -1) { fprintf(stderr, "Socket failure!!\n"); exit(1); } if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &amp;yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } memset(&amp;server, 0, sizeof(server)); memset(&amp;dest,0,sizeof(dest)); server.sin_family = AF_INET; server.sin_port = htons(PORT); server.sin_addr.s_addr = INADDR_ANY; if ((bind(socket_fd, (struct sockaddr *)&amp;server, sizeof(struct sockaddr )))== -1) { //sizeof(struct sockaddr) fprintf(stderr, "Binding Failure\n"); exit(1); } if ((listen(socket_fd, BACKLOG))== -1){ fprintf(stderr, "Listening Failure\n"); exit(1); } while(1) { size = sizeof(struct sockaddr_in); if ((client_fd = accept(socket_fd, (struct sockaddr *)&amp;dest, &amp;size)==-1)) { //fprintf(stderr,"Accept Failure\n"); perror("accept"); exit(1); } printf("Server got connection from client %s\n", inet_ntoa(dest.sin_addr)); //buffer = "Hello World!! I am networking!!\n"; if ((num = recv(client_fd, buffer, 10239,0))== -1) { //fprintf(stderr,"Error in receiving message!!\n"); perror("recv"); exit(1); } // num = recv(client_fd, buffer, sizeof(buffer),0); buffer[num] = '\0'; printf("Message received: %s\n", buffer); close(client_fd); return 0; //close(socket_fd); } } </code></pre> <p>Client:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;errno.h&gt; #include &lt;string.h&gt; #include &lt;netdb.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;netinet/in.h&gt; #include &lt;arpa/inet.h&gt; #define PORT 3490 int main(int argc, char *argv[]) { struct sockaddr_in server_info; struct hostent *he; int socket_fd,num; char *buffer; if (argc != 2) { fprintf(stderr, "Usage: client hostname\n"); exit(1); } if ((he = gethostbyname(argv[1]))==NULL) { fprintf(stderr, "Cannot get host name\n"); exit(1); } if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0))== -1) { fprintf(stderr, "Socket Failure!!\n"); exit(1); } memset(&amp;server_info, 0, sizeof(server_info)); server_info.sin_family = AF_INET; server_info.sin_port = htons(PORT); server_info.sin_addr = *((struct in_addr *)he-&gt;h_addr); if (connect(socket_fd, (struct sockaddr *)&amp;server_info, sizeof(struct sockaddr))&lt;0) { //fprintf(stderr, "Connection Failure\n"); perror("connect"); exit(1); } buffer = "Hello World!! I am networking!!\n"; if ((send(socket_fd,buffer, sizeof(buffer),0))== -1) { fprintf(stderr, "Failure Sending Message\n"); close(socket_fd); exit(1); } else { printf("Message being sent: %s\n",buffer); } close(socket_fd); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload