我正在使用TCP-IP聊天室,并且我的服务器只能接受一个客户端。该客户端能够发送消息,服务器可以正确地将消息写回其正在运行的终端中。
问题是我想让我的服务器接受多个客户端,但是我不知道如果没有fork()或pthread,那是否有可能。
我的套接字编程知识非常基础,这是我上大学时的一项家庭作业,老实说我很固执。
基本上,我可以通过观看教程和阅读代码来实现:
Client.c:
self.rect.y
Server.c:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFSIZE 1024
#define PORT_NO 2001
#define error(a,b) fprintf(stderr, a, b)
int main(int argc, char *argv[] ){
int fd;
int flags;
struct sockaddr_in server;
struct sockaddr_in client;
int server_size;
int client_size;
int bytes;
int rcvsize;
int trnmsize;
int err;
char on;
char buffer[BUFSIZE+1];
char server_addr[16];
on = 1;
flags = 0;
sprintf(server_addr, "%s", argv[1]);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(server_addr);
server.sin_port = htons(PORT_NO);
server_size = sizeof server;
client_size = sizeof client;
fd = socket(AF_INET, SOCK_STREAM, 0 );
if ( fd < 0 ) {
error("%s: Socket creation error\n",argv[0]);
exit(1);
}
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on);
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on);
err = connect( fd, (struct sockaddr *) &server, server_size);
if ( err < 0 ) {
error("%s: Cannot connect to server\n",argv[0]);
exit(2);
}
while (1)
{
printf(" Message: ");
scanf("%s",buffer);
bytes=strlen(buffer)+1;
trnmsize = send( fd, buffer, bytes, flags );
if ( trnmsize < 0 ) {
error("%s: Cannot send to server\n",argv[0]);
exit(3);
}
printf (" %i bytes have been sent to server.\n", trnmsize-1);
rcvsize = recv( fd, buffer, bytes, flags );
if ( rcvsize < 0 ) {
error("%s: Cannot receive from the socket\n",argv[0]);
exit(4);
}
if (strcmp(buffer,"Transmit is OK."))
printf (" Acknowledgement has been received from server.\n");
else
printf(" Acknowledgement error!");
}
close(fd);
exit(0);
}
谢谢!