69,381
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<sys/socket.h>
//messagequeue
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<memory.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#define BUFLENGTH (1024)
#define nPort (6001) //port
struct SndInfo sInfo;
struct SndInfo
{
int iType;
char sBuffer[256];
int iBufferLen;
};
struct msgbuf
{
long mtype;
char mtext[BUFLENGTH];
};
int hotMasterSndInfo(int type, char *buffer, int len)
{
sInfo.iType=type;
strcpy(sInfo.sBuffer,buffer);
printf("here sBuffer [%s]\r\n",sInfo.sBuffer);
sInfo.iBufferLen = len;
}
int main()
{
int i,ret=0;
key_t key;
int msgid;
int result;
char sIP[20]={0};
struct msgbuf data;
struct hostent *h;
int socket_connect;
struct sockaddr_in server_addr;
data.mtype = 1;
bzero(&server_addr,sizeof(server_addr));
printf("Please input target as Dotted decimal IP: \r\n");
gets(sIP);
printf("client start ...\n");
key = ftok(".",'a');
msgid = msgget(key,IPC_CREAT);
if(msgid < 0)
{
perror("messagequeue failed!\n");
exit(1);
}
while(1)
{
printf("waiting for messageQueue......\r\n");
result = msgrcv(msgid,&data,BUFLENGTH,1,0);
if (result < 0)
{
perror("recv messagequeue failed!\n");
exit(1);
}
printf("rec messagequeue OK!\r\n");
memcpy(&sInfo,data.mtext,sizeof(sInfo));
printf("main type:%d buf[%s] len:[%d]\r\n",sInfo.iType,sInfo.sBuffer,sInfo.iBufferLen);
socket_connect = socket(AF_INET,SOCK_STREAM,0);
//cilent address struct fill
server_addr.sin_family =AF_INET;
server_addr.sin_port =htons(nPort);
printf("sIP:[%s]\r\n",sIP);
server_addr.sin_addr.s_addr=inet_addr(sIP);
printf("connect ...\r\n");
if( connect( socket_connect,(struct sockaddr *)& server_addr,sizeof(server_addr) )==-1)
{
printf("connect error!\r\n");
exit(1);
}
printf("connect success!\n");
printf("send ...\r\n");
int sendSequence = 0;
int readBytes=sizeof(data.mtext);
printf("readBytes=%d\r\n",readBytes);
if(readBytes==0)
{
printf("Buffer transmit over!\r\n");
exit(1);
//break;
}
else
{
printf("Buffer [%d] bytes\r\n",readBytes);
}
int sendBytes=send(socket_connect,data.mtext,readBytes,0);
if(sendBytes<0)
{
printf("send error! \r\n");
exit(1);
}
else
{
sendSequence++;
printf("%d send to server:%d bytes\r\n",sendSequence,sendBytes);
}
if(close(socket_connect)!=0)
{
printf("close() error! \r\n");
}
else
{
printf("close socket_connect success!\r\n");
}
}
return 0;
}