Udp
코드 설명 은 다음 과 같 습 니 다.
- //Server.cpp
- #include <stdio.h>
- #include <winsock2.h>
- #pragma comment(lib,"WS2_32.lib")
-
- #define BUF_SIZE 64
-
- int main()
- {
- WSADATA wsadata; // DLL
- int retVal;
-
- SOCKET sServer;
- char buf[BUF_SIZE];
-
- // DLL
- retVal=WSAStartup(MAKEWORD(2,2),&wsadata);
- if(retVal != 0)
- {
- printf("WSAStartup failed!
");
- }
-
- //
- sServer=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
- if(sServer == INVALID_SOCKET)
- {
- printf("socket failed!
");
-
- WSACleanup();
- return -1;
- }
-
- // ( , )
- SOCKADDR_IN addrServ;
- addrServ.sin_family=AF_INET; // TCP/IP
- addrServ.sin_port=htons(4999);
- addrServ.sin_addr.S_un.S_addr=INADDR_ANY;
-
- retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
- if(retVal == SOCKET_ERROR)
- {
- printf("bind failed!
");
-
- closesocket(sServer);
- WSACleanup();
- return -1;
- }
-
-
-
- //
- SOCKADDR_IN addrClient; // ,
- int len=sizeof(SOCKADDR_IN);
-
- ZeroMemory(buf,BUF_SIZE);
-
- retVal=recvfrom(sServer,buf,BUF_SIZE,0,(LPSOCKADDR)&addrClient,&len);
- if(retVal == SOCKET_ERROR)
- {
- printf("recvfrom failed!
");
-
- closesocket(sServer);
- WSACleanup();
- return -1;
- }
-
- //
- printf("Server receives data: ");
- printf("%s
",buf);
-
- //
- closesocket(sServer);
- WSACleanup();
- return 0;
- }
- //Client.cpp
- #include <stdio.h>
- #include <winsock2.h>
- #pragma comment(lib,"WS2_32.lib")
-
- #define BUF_SIZE 64
-
- int main()
- {
- WSADATA wsadata;
- int retVal;
-
- SOCKET sClient;
- char buf[BUF_SIZE];
-
-
- // DLL
- retVal=WSAStartup(MAKEWORD(2,2),&wsadata);
- if(retVal != 0)
- {
- printf("WSAStartup failed!
");
- }
-
- //
- sClient=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
- if(sClient == INVALID_SOCKET)
- {
- printf("socket failed!
");
-
- WSACleanup();
- return -1;
- }
-
-
- // ( , )
- SOCKADDR_IN addrServ;
- addrServ.sin_family=AF_INET; // TCP/IP
- addrServ.sin_port=htons(4999);
- addrServ.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
-
- ZeroMemory(buf,BUF_SIZE);
- strcpy(buf,"Hello Udp!");
-
- retVal=sendto(sClient,buf,BUF_SIZE,0,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
- if(retVal == SOCKET_ERROR)
- {
- printf("sendto failed!
");
-
- closesocket(sClient);
- WSACleanup();
- return -1;
- }
-
- //
- closesocket(sClient);
- WSACleanup();
- return 0;
- }
*************************************************************************
추가 설명:
1.
#define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1)
#define INADDR_ANY (u_long)0x00000000
#include
① 헤더 파일 은 함수 의 성명 만 있 습 니 다.(컴 파일 단계 연결)② 라 이브 러 리 파일,DLL 이 있 으 면 색인 역할 을 합 니 다.없 으 면 함수 의 실현 코드 를 포함 합 니 다.(링크 단계)③ DLL,실행 단계 에서 함수 의 구현 코드 를 연결 합 니 다.
2.
typedef struct WSAData {
WORD wVersion; //
WORD wHighVersion; //
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR* lpVendorInfo;
} WSADATA,
*LPWSADATA;
3.
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
Return Values
The WSAStartup function returns zero if successful. Otherwise, it returns one of the error codes listed in the following.(WSASYSNOREADY | WSAEFAULT)
4.
main()함수 의 경우 0 으로 돌아 가면 성공 적 으로 실 행 된 것 을 나타 낸다.다른 것 으로 돌아 가면 프로그램 이 이상 하 다 는 것 을 나타 낸다.
*************************************************************************
함수 원형:
1.
int sendto(
SOCKET s,
const char* buf,
int len,
int flags,
const struct sockaddr* to,
int tolen
);
int flags, //MSG_OOB | MSG_DONTROUTE
int flags, //MSG_OOB | MSG_PEEK
int recvfrom(
SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen
);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.