📄 prlnet.c
字号:
//******************************************************************
//
// 结构定义文件:PrlNet.c
// 文件内容:网络相关实现函数
// 结构定义规则:见文档《变量定义规范》
// 创建者:
// 创建时间:2007-8-1
//******************************************************************
//*************************头文件包含区*****************************
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <assert.h>
#include "ShareMemOp.h"
#include "ShareMemDebugOut.h"
#include "DefPrl.h"
//******************************************************************
int NetCreateServer()
{
int Server=socket(AF_INET, SOCK_DGRAM, 0);
unsigned int Port;
struct sockaddr_in ServAddr;
int RetBind;
GetGlobalParam(GPT_LOCAL_PORT, &Port);
if(Server<0)
{
return -1;
}
ServAddr.sin_family = AF_INET;
ServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ServAddr.sin_port = htons(Port);
DebugOutMsg(IX_M_NQS, 0, "Port=%ld", Port);
RetBind = bind (Server, (struct sockaddr *) &ServAddr,sizeof(ServAddr));
if(RetBind < 0)
{
return -1;
}
return Server;
}
int NetReceiveMessage(int Server, TNetMessage *Message)
{
int ReceivedBytes = recvfrom(Server, Message->Content, MAX_MESSAGE_LEN, MSG_DONTWAIT, (struct sockaddr *) &Message->FromAddr, &Message->FromAddrLen);
Message->Length = ReceivedBytes;
return ReceivedBytes;
}
int NetSendMessage(TNetMessage *Message)
{
int TransUnitCount = 0;
int Loop = 0;
char Buffer[TRANS_UNIT_SIZE];
//与上位机通讯,大包分割为小包,包前加总包数和包序号,每包固定长度MAX_SMALL_MSG
TransUnitCount = Message->Length / (TRANS_UNIT_SIZE-(sizeof(int)*2));
if(Message->Length % (TRANS_UNIT_SIZE-(sizeof(int)*2)) > 0)
{
TransUnitCount ++;
}
for(Loop=1; Loop <= TransUnitCount; Loop ++)
{
int SendBytes = 0;
memcpy(Buffer, &TransUnitCount, sizeof(int));
memcpy(Buffer+sizeof(int), &Loop, sizeof(int));
memcpy(Buffer+(sizeof(int)*2)
, &Message->Content[(Loop-1)*(TRANS_UNIT_SIZE-(sizeof(int)*2))]
, TRANS_UNIT_SIZE-(sizeof(int)*2));
//分包发送,每包固定为MAX_SMALL_MSG字节
SendBytes=sendto(Message->Server
, Buffer, TRANS_UNIT_SIZE, 0
, (struct sockaddr *) &Message->FromAddr
, Message->FromAddrLen);
if(SendBytes<0)
{
return -1;
}
}
return Message->Length;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -