Chinaunix
标题:
linux下简单的聊天程序(多路复用I/O)
[打印本页]
作者:
shenxiaocheng
时间:
2009-07-09 16:45
标题:
linux下简单的聊天程序(多路复用I/O)
server.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_BUF_SIZE 1024
#define MAX_LISTEN 12
int main(int argc, char *argv[])
{
int sockfd, conn_fd;
int client_fd[MAX_LISTEN];
struct sockaddr_in my_addr, client_addr;
unsigned int backlog, port;
int sin_size;
char buf[MAX_BUF_SIZE + 1];
fd_set rfds;
struct timeval tv;
int retval, maxfd = -1;
int i;
if (argv[1])
port = atoi(argv[1]);
else
port = 8003;
if (argv[2])
backlog = atoi(argv[2]);
else
backlog = 12;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf(stderr, "socket error!\n");
exit(1);
}
int on = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) 0)
{
printf("receive message from client %d successfully : [%s]\ntotal %d bytes\n", client_fd
, buf, sin_size);
}
else
{
close(client_fd
);
FD_CLR(client_fd
, &rfds);
printf("del socket %d from select pipe. \n", client_fd
);
client_fd
= -1;
continue;
}
}
if (FD_ISSET(0, &rfds))
{
bzero(buf, MAX_BUF_SIZE + 1);
fgets(buf, MAX_BUF_SIZE, stdin);
if (!strncasecmp(buf, "quit", 4))
{
printf("quit chat!\n");
break;
}
for (i = 0; i 0)
{
printf("message: %s\t send to client %d successfully, total %d bytes!\n", buf, client_fd
, sin_size);
}
else
{
printf("message: %s\t send failure, error code is %d, error message is %s\n",
buf, errno, strerror(errno));
break;
}
}
}
for (i=0; i
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_BUF_SIZE 1024
int main(int argc, char *argv[])
{
int sockfd;
int sin_size;
struct sockaddr_in dest;
char buf[MAX_BUF_SIZE + 1];
fd_set rfds;
struct timeval tv;
int retval, maxfd = -1;
if (argc != 3)
{
printf("usage: %s ip port\n for example: %s 127.0.0.1 8003\n", argv[0], argv[0]);
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) 0)
{
printf("receive message from server successfully: [%s]\ntotal %d bytes\n", buf, sin_size);
}
else
{
if (sin_size < 0)
printf("receive message failure! error code is %d, error message is %s\n",
errno, strerror(errno));
}
}
if (FD_ISSET(0, &rfds))
{
bzero(buf, MAX_BUF_SIZE + 1);
fgets(buf, MAX_BUF_SIZE, stdin);
if (!strncasecmp(buf, "quit", 4))
{
printf("quit chat!\n");
break;
}
sin_size = send(sockfd, buf, strlen(buf) - 1, 0);
if (sin_size < 0)
{
printf("message send failure: [%s], error code is %d, error message is %s\n",
buf, errno, strerror(errno));
break;
}
else
{
printf("message: %s\tsend to server successfully, total %d bytes\n", buf, sin_size);
}
}
}
close(sockfd);
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u2/78437/showart_1990894.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2