#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#define MAX_SIZE 1024 * 5
#define SERVER_PORT 8888
int main(int argc,char *argv[])
{
void solve(char *,char *);
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char sndMsg[MAX_SIZE];
char rcvMsg[MAX_SIZE];
int nbytes=0;
int n=1;
memset(rcvMsg,0,MAX_SIZE);
memset(sndMsg,0,MAX_SIZE);
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
return -1;
}
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(SERVER_PORT);
if(bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1
)
{
fprintf(stderr,"Bind Error:%s\n\a",strerror(errno));
return -1;
}
if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
return -1;
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-
1)
{
fprintf(stderr,"Accept Error:%s\n\a",strerror(errno));
return -1;
}
if((n=fork())==0)
{
// while(1)
{
memset(rcvMsg,0,MAX_SIZE);
memset(sndMsg,0,MAX_SIZE);
if((nbytes=recv(new_fd,rcvMsg,MAX_SIZE,0))==-1)
{
fprintf(stderr,"Read Error:%s\n\a",strerror(errno));
return -1;
}
printf("rcvMsg:[%s]\n",rcvMsg);
solve(rcvMsg,sndMsg);
if(send(new_fd,sndMsg,strlen(sndMsg),0)==-1)
{
fprintf(stderr,"Write Error:%s\n\a",strerror(errno));
return -1;
}
printf("sndMsg:[%s]\n",sndMsg);
}
}
else if(n<0)
{
printf("Fork Error\n\a");
close(new_fd);
}
}
close(sockfd);
return 0;
}
/*读取要发给客户端的报文*/
/*
int readFile(char *path,char *buffer)
{
int fd;
memset(buffer,0,MAX_SIZE);
fd=open(path,O_RDONLY);
if(fd==-1)
{
printf("Open Error\n");
return -1;
}
read(fd,buffer,MAX_SIZE);
close(fd);
return 0;
}
*/
int readFile(char *sFileNamePath, char *sBuf)
{
FILE *fp;
char sTmp[1024];
fp = fopen( sFileNamePath , "r" );
if( fp == NULL )
{
return -1;
}
while( !feof(fp) )
{
memset(sTmp,0,sizeof(sTmp));
fgets(sTmp,1024,fp);
strcat(sBuf,sTmp);
}
fclose(fp);
return 0;
}
/*将客户端发来的报文写入日志*/
int writeLog(char *path,char *str)
{
FILE *fd;
fd=fopen(path,"a");
if( NULL == fd )
{
printf("Open Log File Error\n");
return -1;
}
fprintf(fd,"%s\n",str);
fclose(fd);
return 0;
}
/*截取字符串*/
void cutStr(char *des,char *source,int start,int len)
{
char *p;
int i=0;
for(p=source+start;p<source+start+len;p++)
{
des[i]=*p;
i++;
}
des[i]='\0';
}
/*根据交易码将相应报文写入对应的文件*/
void solve(char *recv,char *snd)
{
char code1[5];
memset(code1,0,5);
cutStr(code1,recv,2,4);
printf("code=%s\n",code1);
int code=atoi(code1);
if(code==2001)//银行发送的查询请求包
{
if(writeLog("cx.log",recv)!=0)
{
printf("Write Log Error\n");
}
if(readFile("send_cx.log",snd)!=0)
{
printf("Read Log Error\n");
}
}
else if(code==2002)//银行发送的缴费请求包
{
if(writeLog("jf.log",recv)!=0)
{
printf("Write Log Error\n");
}
if(readFile("send_jf.log",snd)!=0)
{
printf("Read Log Error\n");
}
}
else if(code==2003)//银行发送的冲正请求包
{
if(writeLog("cz.log",recv)!=0)
{
printf("Write Log Error\n");
}
if(readFile("send_cz.log",snd)!=0)
{
printf("Read Log Error\n");
}
}
else if(code==2008)//银行发送的对账请求aaaaaa
{
if(writeLog("dz.log",recv)!=0)
{
printf("Write Log Error\n");
}
if(readFile("send_dz.log",snd)!=0)
{
printf("Read Log Error\n");
}
}
else
{
printf("报文发送错误\n");
}
}
java实现socket通讯互发
需积分: 13 187 浏览量
2014-08-17
15:02:43
上传
评论
收藏 3KB RAR 举报
溯光
- 粉丝: 0
- 资源: 3
最新资源
- J211-T1B-A-VB一款SOT23封装P-Channel场效应MOS管
- J210-VB一款SOT23封装P-Channel场效应MOS管
- J210-T1B-A-VB一款SOT23封装P-Channel场效应MOS管
- Suno V3 AI音乐生成神器,助你秒变音乐大师,suno AI音乐使用教程
- 自适应极化滤波完成P/S波分离
- 0b40adff-950d-44cf-88e6-f4a64292b638.apk
- J209-VB一款SOT23封装P-Channel场效应MOS管
- OLED12864模块(IIC接口)中文说明书.pdf
- 22304010116工管余文贤.bak
- 电路各单元电路的特点与作用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈