資源簡介
南自以太網103規約文本說明及有效的上位機代碼,供電力自動化愛好者下載應用!

代碼片段和文件信息
//南自PSL6000網絡103協議處理
#include?“stdafx.h“
#include?“CreateTask.h“
#include?“\fsa3000\dev\env\inc\fjRlibdef.h“
unsigned?short???g_Net_Rec_Buf_Item_In_Pt_PSL?=0;
STRUCT_NetRecv???g_Net_Recv_Buf_PSL[MAX_NET_RECV_ITEM_NUM];??????????????
//BOOL?g_PSL103_Udp_sent?=?FALSE;
//服務器端socket?for?PSL
UINT?PSLInitTcp(?LPVOID?pParam?)
{?
????BYTE?TaskId??=?(BYTE)(DWORD)pParam; //第一個啟動服務器socket的任務ID
//CChannelSignal?*pChannel?=?Task[TaskId]->pChannel;
????int?i?TcpsockAddSizetmp=1;
????struct??sockaddr_in??TcpclientAddr;
????struct??sockaddr_in??TcpserverAddr;
????fd_set?rd_fds;
????SOCKET??TcpSocketId=INVALID_SOCKETAcceptTcpId=INVALID_SOCKET;
????//只建一個tcp?server ?在外面判斷了,這里不可以再判斷
????//if(SrvSocketPSL.Server_Has_Create_PSL?!=?0)?return?0;
//SrvSocketPSL.Server_Has_Create_PSL?=?1;?
????TcpsockAddSize??=?sizeof(struct?sockaddr_in);???
????while(1)
????{?
if(bThreadExit)break;
???? memset((char*)&TcpserverAddr0TcpsockAddSize);
????????
TcpserverAddr.sin_family??????=?AF_INET;
????????TcpserverAddr.sin_port????????=?htons(SrvSocketPSL.TcpPort_PSL);
????????TcpserverAddr.sin_addr.s_addr?=?htonl(INADDR_ANY);
if((TcpSocketId?=?::socket(AF_INETSOCK_STREAM0))==INVALID_SOCKET)
{
????????????Sleep(800);
continue;
????????}
if(bind(TcpSocketId(struct?sockaddr?*)&TcpserverAddrTcpsockAddSize)==SOCKET_ERROR)
{
::closesocket(TcpSocketId);
Sleep(800);
continue;
}
if(listen(TcpSocketIdSOMAXCONN)==SOCKET_ERROR)
{
::closesocket(TcpSocketId);
Sleep(800);
continue;
}
????????FD_ZERO(&rd_fds);
FD_SET(TcpSocketId&rd_fds);
//進入下面,就會接收多個遠方發送的連接請求
????????while(1)
????????{
if(bThreadExit)break;
????????????if(select(TcpSocketId+1&rd_fds(struct?fd_set?*)0(struct?fd_set?*)0(struct?timeval?*)0)<=0)
????????????{
???????????? if(bThreadExit)break;
????????????????continue;
????????????}
????????????if(FD_ISSET(TcpSocketId&rd_fds))
????????????{
????????????????tmp=1;
????????????????if(ioctlsocket(TcpSocketIdFIONBIO(unsigned?long*)&tmp)?==?SOCKET_ERROR) //非阻塞socket
????????????????{
????????????????????Sleep(20);
????????????????????continue;
????????????????}
????????????????AcceptTcpId?=?accept(TcpSocketId(struct?sockaddr?*)&TcpclientAddr&TcpsockAddSize);
????????????????if(AcceptTcpId?!=?INVALID_SOCKET)
????????????????{
for(i=0;i {
if(TcpclientAddr.sin_addr.s_addr?==?SrvSocketPSL.Client_PSL[i].ConnIp_PSL)
{
????????????????if(SrvSocketPSL.Client_PSL[i].Socket_PSL?!=?INVALID_SOCKET)?
???????????? {
closesocket(SrvSocketPSL.Client_PSL[i].Socket_PSL);
SrvSocketPSL.Client_PSL[i].Socket_PSL?=?INVALID_SOCKET;
???????????? }
//設置為非阻塞
if(ioctlsocket(AcceptTcpIdFIONBIO(unsigned?long*)&tmp)?==?SOCKET_ERROR)
{
????????????????????shutdown(AcceptTcpId2);
closesocket(AcceptTcpId);
}
????????????????else
????????????????{
????????????????????SrvSocketPSL.Client_PSL
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????2028983??2013-03-20?17:59??南自以太網103規約.zip
?????文件???????71258??2019-01-02?10:56??PSL103Net.cpp
評論
共有 條評論