udpsocket.cpp
来自「广宇GPS系统」· C++ 代码 · 共 117 行
CPP
117 行
#include "stdafx.h"
#include "UdpSocket.h"
int CUdpSocket::InitWSA(){
WSADATA w;
if (WSAStartup(MAKEWORD(2,2), &w)!=0){
ErrorNote("WSAStartup", WSAGetLastError());
return 0;
}
return 1;
}
int CUdpSocket::InitServer(char *IP_Addr, int Port){
int o = 1;
int t = 60;
SOCKET ServerSocket;
if (!InitWSA())
return 0;
ServerSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (ServerSocket==INVALID_SOCKET){
ErrorNote("socket", WSAGetLastError());
return 0;
}
if (setsockopt(ServerSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&o, sizeof(0))){
ErrorNote("setsockopt:SO_REUSEADDR", WSAGetLastError());
return 0;
}
if (setsockopt(ServerSocket, SOL_SOCKET, SO_SNDTIMEO, (char*)&t, sizeof(t))){
ErrorNote("setsockopt:SO_SNDTIMEO", WSAGetLastError());
return 0;
}
if (setsockopt(ServerSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&t, sizeof(t))){
ErrorNote("setsockopt:SO_RCVTIMEO", WSAGetLastError());
return 0;
}
memset(&server, 0x0, sizeof(sockaddr_in));
server.sin_family = AF_INET;
server.sin_port = htons(Port);
server.sin_addr.S_un.S_addr = inet_addr(IP_Addr);
if (bind(ServerSocket, (struct sockaddr *)&server, sizeof(struct sockaddr))==SOCKET_ERROR){
ErrorNote("bind", WSAGetLastError());
return 0;
}
return ServerSocket;
}
int CUdpSocket::SocketSend(SOCKET CSocket, char *buf, int len, const sockaddr *t, int tlen){
int status = sendto(CSocket, buf, len, 0, t, tlen);
if (status==SOCKET_ERROR){
ErrorNote("send", WSAGetLastError());
}
return status;
}
int CUdpSocket::SocketRecv(SOCKET CSocket, char *buf, int len, sockaddr *f, int flen){
int status = recvfrom(CSocket, buf, len, 0, f, &flen);
if (status==SOCKET_ERROR){
ErrorNote("recv", WSAGetLastError());
}
return status;
}
void CUdpSocket::ErrorNote(char *event, int Error_ID){
char filePath[255];
time_t timer = time(NULL);
struct tm *now = localtime(&timer);
sprintf(filePath, "err\\SOCKET_%04d-%02d-%02d.txt", now->tm_year+1900, now->tm_mon+1, now->tm_mday);
FILE *cfPtr = fopen(filePath, "a");
if (cfPtr==NULL){
system("md err");
cfPtr = fopen(filePath, "a");
}
if (cfPtr!=NULL){
printf("%-10s%-10d%02d:%02d:%02d\n", event, Error_ID, now->tm_hour, now->tm_min, now->tm_sec);
fprintf(cfPtr, "%s,%d,%02d:%02d:%02d\n", event, Error_ID, now->tm_hour, now->tm_min, now->tm_sec);
fclose(cfPtr);
}
}
int CUdpSocket::SocketAccept(SOCKET ServerSocket){
int l = sizeof(visite);
SOCKET CSocket;
if (ServerSocket==INVALID_SOCKET)
return 0;
CSocket = accept(ServerSocket, (struct sockaddr *)&visite, &l);
if (CSocket==INVALID_SOCKET){
ErrorNote("accept", WSAGetLastError());
return 0;
}
return CSocket;
}
int CUdpSocket::InitClient(char *IP_Addr, int Port){
long a = 1L;
int o = 1;
int t = 60;
SOCKET CSocket;
if (!InitWSA())
return 0;
CSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (CSocket==INVALID_SOCKET){
ErrorNote("socket", WSAGetLastError());
return 0;
}
client.sin_family = AF_INET;
client.sin_port = htons(Port);
client.sin_addr.S_un.S_addr = inet_addr(IP_Addr);
return CSocket;
}
void CUdpSocket::TerminateSocket(SOCKET CSocket){
if (CSocket!=INVALID_SOCKET)
closesocket(CSocket);
WSACleanup();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?