【发布时间】:2020-08-27 01:11:12
【问题描述】:
我正在尝试在 C 中创建一个 echo 客户端服务器。问题是,当我启动服务器并运行客户端代码时,在客户端 shell 中它显示“已连接”,但在服务器 shell 中它仍然显示“等待连接” ”。 (服务器没有说“接受失败”。它永远说“等待连接”)。我认为服务器不接受客户端,因此如果我从客户端外壳写任何东西,它就不会回来。
如果我能得到任何帮助,我将不胜感激。
这是服务器代码:
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int socket_desc, client_sock, c, read_size;
struct sockaddr_in server, client;
char client_message[2000];
//create socket
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if(socket_desc == -1)
{
printf("Socket couldn't created\n");
}
puts("Socket created");
//prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );
//bind
if( bind(socket_desc,(struct sockaddr *)&server, sizeof(server)) < 0)
{
//print the error message
perror("bind failed");
return 1;
}
puts("bind done");
//Listen
listen(socket_desc , 3)
//Accept and incoming connection
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
while(1)
{
//accept connection from an incoming client
client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t *)&c);
if(client_sock < 0)
{
perror("accept failed");
return 1;
}
}
puts("Connection accepted");
//Recieve message from client
while( (read_size = recv(client_sock , client_message , 2000 , 0))>0)
{
//Send the message back to client
write(client_sock , client_message , strlen(client_message));
}
if(read_size == 0)
{
puts("Client disconnected");
}
else if(read_size == -1)
{
perror("recv failed");
}
return 0;
}
这里是客户端代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main(int argc , char *argv[])
{
int sock;
struct sockaddr_in server;
char message[1000] , server_reply[1000];
//Create socket
sock = socket(AF_INET , SOCK_STREAM , 0);
if(sock == -1)
{
printf("Could not create socket");
}
puts("Socket created");
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons( 8888 );
//Connect to remote server
if(connect(sock, (struct sockaddr *)&server, sizeof(server))<0)
{
perror("connect failed");
return 1;
}
puts("Connected\n");
//Keep communicating with server
while(1)
{
printf("Enter message: ");
scanf("%s", message);
//Send some data
if(send(sock, message, strlen(message), 0)<0)
{
puts("Send failed");
return 1;
}
//Recieve a reply from server
if( recv(sock, server_reply, 1000, 0)<0)
{
puts("recv failed");
}
puts("Server reply: ");
puts(server_reply);
bzero(message, 1000);
bzero(server_reply, 1000);
}
close(sock);
return 0;
}
【问题讨论】:
标签: c linux websocket tcp server