网络编程示例
服务端:
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
#include
SOCKET sckt;
struct sockaddr_in scktinf;
//SOCKET clnt;
struct clntStrc
{
int nmr;
char nm[0x20];
SOCKET sckt;
}clntAr[100];
int flg;
int rmSnd();
int rmRcv(struct clntStrc *);
int rmLstn();
char *IMPSTNMR="_IMPSTNMR@%d";
int c;
int rmRcv(struct clntStrc *clnt)
{
char strg[0x1000],strg2[0x1000];
int f;
//pthread_t thrSnd;
//pthread_create(&thrRcv,NULL,rmSnd,sckt);
int t;
int n;
while (1)
{
f=recv(clnt->sckt,strg,0x100,0);
//printf("%s\n",strg);
if (f<0) break;
switch(strg[0])
{
case '&':
{
t=strtol(strg+1,NULL,10);
sprintf(strg2,"*%d%s\n",clnt->nmr,strchr(strg,'@'));
send(clntAr[t].sckt,strg2,strlen(strg),0);
break;
}
default:
{
printf("CLIENT#%d:%s\n",clnt->nmr,strg);
strcpy(strg,"");
}
}
//clnt=accept(sckt,NULL,NULL);
//flg=1;
/*
f=-1;
if (recv(clnt->sckt,strg,0x100,0)>=0)
{
printf("CLIENT#%d:%s\n",clnt->nmr,strg);
strcpy(strg,"");
}
*/
}
}
int rmSnd()
{
char strg[0x1000],strg2[0x1000];
int n;
while (1)
{
gets(strg);
switch (strg[0])
{
case '&':
{
n=strtol(strg+1,NULL,10);
strcpy(strg2,strchr(strg,'@'));
//printf("ECHO:%s\n",strg2);
send(clntAr[n].sckt,strg2,strlen(strg2),0);
}
case '_':
{
}
}
//sprintf(strg,"%d@%s",n,strg2);
//if (send(sckt,strg,strlen(strg),0)>=0)
//{
// flg=1;
//}
}
}
int rmLstn()
{
SOCKET clnt,tclnt;
c=0;
char strg[0x1000];
char tNmr[0x10];
int f;
pthread_t thrRcv,thrSnd;
pthread_create(&thrSnd,NULL,rmSnd,NULL);
SOCKET *tClnt;
int tLen=sizeof(scktinf);
char msgNmr[0x1000];
while (1)
{
c+=1;
clntAr[c].sckt=accept(sckt,&scktinf,&tLen);
clntAr[c].nmr=c;
//memcpy()
//tClnt=malloc(sizeof(SOCKET));
//memcpy(tClnt,&clnt,sizeof(SOCKET));
pthread_create(&thrRcv,NULL,rmRcv,clntAr+c);
sprintf(msgNmr,IMPSTNMR,c);
send(clntAr[c].sckt,msgNmr,strlen(msgNmr),0);
/*
if (clnt>=0)
{
//printf("LEGATO#%d\n",clnt&0xFF);
//printf("LEGATO\n");
//c++;
//itoa(c,tNmr,10);
//while (send(clnt,tNmr,strlen(tNmr),0)<0);
//f=recv(clnt,strg,0x1000,0);
//pthread_create(&thrSnd,NULL,rmSnd,clnt);
}
*/
}
}
int main()
{
WSADATA WSD;
WSAStartup(MAKEWORD(2,2),&WSD);
char adrs[0x20];
scanf("%s",adrs);
while (adrs[strlen(adrs)-1]=='\r' || adrs[strlen(adrs)-1]=='\n')
{
adrs[strlen(adrs)-1]='\0';
}
scktinf.sin_addr.s_addr=inet_addr(adrs);
scktinf.sin_port=htons(2070);
scktinf.sin_family=2;
sckt=socket(2,1,0);
bind(sckt,&scktinf,sizeof(scktinf));
listen(sckt,10);
flg=0;
pthread_t thrdLstn;
pthread_create(&thrdLstn,NULL,rmLstn,NULL);
pthread_join(thrdLstn,NULL);
//pthread_t thrdRcv,thrdSnd;
//pthread_create(&thrdRcv,NULL,rmRcv,NULL);
//pthread_create(&thrdSnd,NULL,rmSnd,NULL);
//pthread_join(thrdRcv,NULL);
//pthread_join(thrdSnd,NULL);
}
客户端:
#include
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
#include
SOCKET sckt;
struct sockaddr_in scktinf;
int flg;
int n;
int i;
int rmRcv();
int rmSnd();
int rmLg();
int rmAnlz(char *);
char *IMPSTNMR="_IMPSTNMR@";
char *CNTNT="@";
int rmAnlz(char *strg)
{
int t;
//printf("%s\n",strg);
switch(strg[0])
{
case '@':
{
printf("SERVER%s\n",strg);
return 3;
break;
}
case '_':
{
if (strstr(strg,"_IMPSTNMR@")!=NULL)
{
//i=
printf("SERVER_NMR@%s\n",strg+10);
i=strtol(strg+9,NULL,10);
}
//i=
return 0;
break;
}
case '*':
{
t=strtol(strg+1,NULL,10);
printf("*%d@%s\n",t,strchr(strg,'@')+1);
return 3;
break;
}
default:
return -1;
}
}
int rmRcv()
{
char *strg;
pthread_t *pThrdAnlz;
while (1)
{
strg=malloc(0x1000);
memset(strg,0,0x1000);
while (flg==1 && recv(sckt,strg,0x1000,0)>=0)
{
//printf("SERVER:%s\n",strg);
pthread_create(NULL,NULL,rmAnlz,strg);
//
}
}
}
int rmSnd()
{
char strg[0x1000],strg2[0x1000];
int n;
while (1)
{
gets(strg);
//sprintf(strg,"%d@%s",n,strg2);
send(sckt,strg,strlen(strg),0);
}
}
int rmLg()
{
while (connect(sckt,&scktinf,sizeof(scktinf))<0);
//printf("CONNECTED\n");
flg=1;
//char tNmr[0x10];
//recv(sckt,tNmr,0x10,0);
//printf("SISTEMA@%s\n",tNmr);
//n=atoi(tNmr);
pthread_t thrdSnd,thrdRcv;
pthread_create(&thrdSnd,NULL,rmSnd,NULL);
pthread_create(&thrdRcv,NULL,rmRcv,NULL);
pthread_join(thrdSnd,NULL);
pthread_join(thrdRcv,NULL);
//pthread_create(&thrdRcv,NULL,rmRcv,NULL);
}
int main()
{
WSADATA WSD;
WSAStartup(MAKEWORD(2,2),&WSD);
char adrs[0x20];
//scanf("DIGITAL ");
scanf("%s",adrs);
while (adrs[strlen(adrs)-1]=='\r' || adrs[strlen(adrs)-1]=='\n')
{
adrs[strlen(adrs)-1]='\0';
}
scktinf.sin_addr.s_addr=inet_addr(adrs);
scktinf.sin_port=htons(2070);
scktinf.sin_family=2;
sckt=socket(2,1,0);
pthread_t thrdLg;
pthread_create(&thrdLg,NULL,rmLg,NULL);
pthread_join(thrdLg,NULL);
//pthread_t thrdRcv,thrdSnd;
//pthread_create(&thrdRcv,NULL,rmRcv,NULL);
//pthread_create(&thrdSnd,NULL,rmSnd,NULL);
//pthread_join(thrdRcv,NULL);
//pthread_join(thrdSnd,NULL);
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~