69,371
社区成员
发帖
与我相关
我的任务
分享
#include "ImmediaCommunicate.h"
int main(int argc,char *argv[])
{
int sockfd,newsockfd;
struct sockaddr_in server_addr; /*define sever's sock address*/
struct sockaddr_in client_addr;
int sin_size,portnumber;
char buf[MAXSIZE];
MSG *pmsg = NULL;
pthread_t tidsend,tidrecv;
if(argc != 2)
{
fprintf(stderr,"%s paramete error!try again with port num\a\n",argv[0]);
exit(1);
}
if((portnumber = atoi(argv[1]))<0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
/*socket...*/
if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}
/*binging...*/
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(portnumber);
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}
/*listening...*/
if(listen(sockfd,5) == -1)
{
fprintf(stderr,"listen error:%s\n\a",strerror(errno));
exit(1);
}
while(1)
{
printf("waiting for connect from a client...\n");
sin_size = sizeof(struct sockaddr_in);
if((newsockfd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)) == -1)
{
fprintf(stderr,"accept error:%s\n\a",strerror(errno));
exit(1);
}
printf("Server get a connection from %s\n",inet_ntoa(client_addr.sin_addr));
pmsg =(MSG*)malloc(sizeof(MSG));
pmsg->sockfd = newsockfd;
pmsg->ipstr =(char*)inet_ntoa(client_addr.sin_addr);
pmsg->port = client_addr.sin_port;
if(pthread_create(&tidsend,NULL,send_thread,(void*)pmsg) != 0)
{
fprintf(stderr,"create send_thread error:%s\n",strerror(errno));
free(pmsg);
exit(1);
}
if(pthread_create(&tidrecv,NULL,recv_thread,(void*)pmsg) != 0)
{
fprintf(stderr,"create recv_thread error:%s\n",strerror(errno));
free(pmsg);
exit(1);
}
pthread_join(tidsend,NULL);
pthread_join(tidrecv,NULL);
printf("send and recv threads both returned!\n\n");
free(pmsg);
close(newsockfd);
}
close(sockfd);
exit(0);
}
#include "ImmediaCommunicate.h"
int main(int argc,char *argv[])
{
if(argc != 3)
{
fprintf(stderr,"%s lack parameter. Try angain with right Ip and port num.\n",argv[0]);
exit(0);
}
/* create socket*/
int sockfd;
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"create socket fialed:%s\n",strerror(errno));
exit(0);
}
printf("mark\n");
/*get server's ip and port*/
in_addr_t ip;
if((ip = inet_addr(argv[1]))==INADDR_NONE)
{
fprintf(stderr,"get ip failed:%s\n",strerror(errno));
exit(1);
}
int port;
if((port = atoi(argv[2]))<0)
{
fprintf(stderr,"port parameter error!%s\n",strerror(errno));
exit(1);
}
/*create address*/
struct sockaddr_in server_addr;
memset((void*)&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr =htonl(ip);
printf("connecting server slide...\n");
/*connect and bind locale socket to default address*/
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))== -1)
{
fprintf(stderr,"connetc error:%s\n",strerror(errno));
exit(1);
}
printf("connetc server slide success...\n");
/*connect success ,now communicate with server.create send and recv thread*/
MSG *pmsg = malloc(sizeof(MSG));
pmsg->sockfd = sockfd;
pmsg->ipstr = argv[1];
pmsg->port = port;
pthread_t tidsend;
pthread_t tidrecv;
if(pthread_create(&tidsend,NULL,send_thread,(void*)pmsg)!=0)
{
fprintf(stderr,"create send_thread failed: %s\n",strerror(errno));
free(pmsg);
exit(0);
}
if(pthread_create(&tidrecv,NULL,recv_thread,(void*)pmsg)!=0)
{
fprintf(stderr,"create recv_thread failed: %s\n",strerror(errno));
free(pmsg);
exit(0);
}
pthread_join(tidsend,NULL);
pthread_join(tidrecv,NULL);
close(sockfd);
printf("send and recv threads both returned!\n");
return 0;
}