#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<pthread.h>
#define MAXBUF 1024
void* conClient(int new_fd);
static char buf[MAXBUF+1];
int main(int argc,char *argv[])
{
socklen_t len;
int pid;
int sockfd,new_fd;
struct sockaddr_in my_addr,their_addr;
unsigned int myport,lisnum;
//char buf[MAXBUF+1];
if(argv[2])
myport=atoi(argv[2]);
else
myport=8088;
if(argv[3])
lisnum=atoi(argv[3]);
else
lisnum=5;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(myport);
if(argv[1])
my_addr.sin_addr.s_addr=inet_addr(argv[1]);
else
my_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(EXIT_FAILURE);
}
if(listen(sockfd,lisnum)==-1)
{
perror("listen");
exit(EXIT_FAILURE);
}
while(1)
{
pthread_t con;
printf("wait for connect!\n");
len=sizeof(struct sockaddr);
if((new_fd=accept(sockfd,(struct sockaddr *)&their_addr,&len))==-1)
{
perror("accept");
exit(EXIT_FAILURE);
}
else
{
printf("server:got connection from %s,port %d,socket %d\n",inet_ntoa(their_addr.sin_addr),ntohs(their_addr.sin_port),new_fd);
if(pthread_create(&con, NULL, conClient(new_fd), (void *)new_fd) == -1)
{
printf("error");
}
}
printf("newfd=%d\n",new_fd);
if(!strncasecmp(buf,"quit",4))
{
printf("i will close the connect!\n");
break;
}
}
close(sockfd);
}
void *conClient(int new_fd){
char* buf1 = "wlecome Like QQ";
strcpy(buf,buf1);
pthread_detach(pthread_self());
int len;
while(1)
{
printf("%s\n",buf);
len=send(new_fd,buf,strlen(buf),0);
if(len>0)
{
printf("message:%s\t send sucessful,send %dbyte!\n",buf,len);
bzero(buf,MAXBUF+1);
}
else
{
printf("message'%s' send failure!errno code is %d,errno message is '%s'\n",buf,errno,strerror(errno));
break;
}
len=recv(new_fd,buf,MAXBUF,0);
if(len>0)
printf("message recv successful:'%s',%dByte recv successful:'%s',%dByte recv\n",buf,len);
else
{
if(len<0)
printf("recv failure!errno code is %d,errno message is '%s'\n",errno,strerror(errno));
else
printf("the other one close quit\n");
break;
}
}
close(new_fd);
pthread_exit(NULL);
}
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/123598.html
標籤:應用程序開發區
下一篇:Redis到底能解決那些問題
