c语言网络通信,C语言网络通讯的示例

#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);

}

服务端:#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);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值