资源简介

linux c tcp socket 多线程 简单聊天室 ,服务器端负责转发,代码很简陋有待改进

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#define BUFF_SIZE 1024
/*
* ./tcpclienttest [hostname] [port]//三个参数程序名算一个参数[]表示可以输也可不输
*/
int main(int argcchar *argv[])
{
int sockfd;
int rtncount=0;
struct sockaddr_in servip;
char *hostip;
unsigned short port;
char buff[BUFF_SIZE];
char name[20];
char message[BUFF_SIZE];
int recvlen=0sendlen;
int msglen=0;//message长度
struct hostent *host;

fd_set rdfd;
int maxfd;
struct timeval tv;

if(argc<2)
{
hostip=“localhost“;//服务器地址,不输如服务器ip的话默认本机
port=8080;
}
else if(argc==2)
{
port=8080;
}
else
{
hostip=argv[1];
port=atoi(argv[2]);//atoi()字符串转int
}
printf(“will connect %s:%d\n“hostipport);

if((host=gethostbyname(hostip))==NULL)
{
perror(“gethostbyname“);
exit(1);
}
sockfd=socket(AF_INETSOCK_STREAM0);
if(sockfd==-1)
{
perror(“socket\n“);
exit(1);
}

bzero(&servipsizeof(struct sockaddr_in));
servip.sin_family=AF_INET;
servip.sin_port=htons(port);
servip.sin_addr=*((struct in_addr *)host->h_addr);
//#define h_addr h_addr_list[0]char**h_addr_list#include


rtn=connect(sockfd(struct sockaddr *)&servipsizeof(servip));
if(rtn==-1)
{
printf(“connect to %s:%d fail.\n“(char *)inet_ntoa(servip.sin_addr)
ntohs(servip.sin_port));
perror(“connect\n“);
close(sockfd);
exit(1);
}
printf(“connect to %s:%d success.\n“(char *)inet_ntoa(servip.sin_addr)
ntohs(servip.sin_port));
strcpy(name“client-1“);
sendlen=send(sockfdname200);
if(sendlen==-1)
{
perror(“send name\n“);
close(sockfd);
exit(1);
}

while(1)
{
bzero(buffBUFF_SIZE); //清空发送缓冲区
bzero(messageBUFF_SIZE);//清空接收缓冲区
//gets(buff);

FD_ZERO(&rdfd);
FD_SET(0&rdfd);
FD_SET(sockfd&rdfd);

if(sockfd>maxfd)
{
maxfd=sockfd;
}

tv.tv_sec=0;
tv.tv_usec=0;

rtn=select(maxfd+1&rdfdNULLNULLNULL);
//printf(“select return: %d\n“rtn);

if(FD_ISSET(0&rdfd))
{
recvlen=read(0buffBUFF_SIZE);//从键盘输入字符 存到 buff
if(recvlen>0)
{
sendlen=send(sockfdbuffBUFF_SIZE0);
if(sendlen==-1)
{
perror(“send message\n“);
break;
}
}
}

recvlen=recv(sockfdmessageBUFF_SIZE0);
if(recvlen==-1)
{
perror(“recv message\n“);
break;
}

printf(“%s\n“message);
}
close(sockfd);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .......      2520  2012-01-02 00:39  简单聊天室\clientroom.c

    .......      3683  2012-01-02 00:41  简单聊天室\serverroom.c

    I..D...         0  2012-01-02 00:44  简单聊天室

----------- ---------  ---------- -----  ----

                 6203                    3


评论

共有 条评论