23,121
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <cstring>
#include <stdlib.h>
#include <strings.h>
using namespace std;
void* pthread1(void *param)
{
int sk = *( (int*)param );
struct sockaddr_in caddr;
bzero(&caddr,sizeof(caddr));
size_t len = sizeof(caddr);
char msg[1024] = {'\0'};
while(1)
{
recvfrom(sk,msg,1024,0,(struct sockaddr*)&caddr,&len);
if( strcmp(msg,"quit") == 0 )
{
break;
}
}
pthread_detach(pthread_self());
}
using namespace std;
int main(int argc,char *argv[])
{
int sk = socket(AF_INET,SOCK_DGRAM,0);
if(sk == -1)
{
cout<<"create socket fialied..."<<endl;
return 0;
}
struct sockaddr_in saddr;
bzero(&saddr,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(4040);
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
if( bind(sk,(struct sockaddr*)&saddr,sizeof(saddr))<0 )
{
cout<<"bind failed..."<<endl;
close(sk);
}
struct sockaddr_in caddr;
bzero(&caddr,sizeof(caddr));
caddr.sin_family = AF_INET;
caddr.sin_port = htons( atoi(argv[1]) );
caddr.sin_addr.s_addr = inet_addr(argv[2]);
pthread_t pt;
pthread_create(&pt,NULL,pthread1,(void*)&sk);
char msg[1024] = {'\0'};
while(1)
{
cin.getline(msg,1024);
if(sendto(sk,msg,strlen(msg)+1,0,(struct sockaddr*)&caddr,sizeof(caddr))<0)
{
cout<<"send failed"<<endl;
}
if( strcmp(msg,"quit") == 0 )
{
break;
}
}
close(sk);
return 0;
}