标签:网络编程
#include <stdio.h> #include <winsock2.h> #include <stdlib.h> #include <string.h> #pragma comment(lib,"ws2_32.lib") #include <pthread.h> 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 <stdio.h>
#include <malloc.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <pthread.h>
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);
}标签:网络编程
原文地址:http://blog.51cto.com/13715730/2106627