UDP 프로토콜, socket 프로그래밍, 윈도우즈 API로 호출, 클라이언트와 서버 구현
2360 단어 운영 체제
socket 활용
언어: C 언어
환경:컴파일 가능한 환경
코드는 다음과 같습니다.
#include
#include
#include
int main()
{
WSADATA wsaData;
SOCKET RecvSocket;
struct sockaddr_in RecvAddr;
int port = 27015;
char RecvBuf[1024];
int BufLen = 1024;
int len =0;
int flag = 0;
FILE* fp;
struct sockaddr_in SenderAddr;
int SenderAddrSize = sizeof(SenderAddr);
//
WSAStartup(MAKEWORD(2, 2), &wsaData);
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(port);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
// ,
if(bind(RecvSocket, (SOCKADDR* )&RecvAddr, sizeof(RecvAddr))< 0){
printf("Error: bind failed!
");
exit(1);
}
printf("Receving datagrams ...
");
for(; ; ){
static int count = 0;
static int fileNum = 0;
char filenameTmp[20];
len = recvfrom(RecvSocket, RecvBuf, BufLen, 0, (SOCKADDR* )&SenderAddr, &SenderAddrSize);
sendto(RecvSocket, RecvBuf, BufLen, 0, (SOCKADDR* )&SenderAddr, &SenderAddrSize);
//printf("Data Success, and sended!");
RecvBuf[len] = '\0';
// , UDP ;
if(strcmp(RecvBuf, "file send -- 123")==0){
fileNum++;
sprintf(filenameTmp, "receive%d.txt", fileNum);
fp = fopen(filenameTmp, "a+");
printf("file will received
");
flag = 1;
}else if(strcmp(RecvBuf, "file sended -- 123")==0){
printf("file have received!
");
fclose(fp);
flag = 0;
}else{
if(flag == 1){
count++;
fprintf(fp ,"%s\t",RecvBuf);
if((count%5)== 0){
fprintf(fp ,"
");
}
}else{
printf("Received Data: %s
", RecvBuf);
}
}
}
printf("Finished receiving. Closing socket.
");
closesocket(RecvSocket); // ,
printf("Exiting.
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
독서 노트문제1: 한 파일에 10000000개의 기록이 포함되어 있으며, 각 기록의 내용은 7자리의 정수이다.기록은 중복되지 않는다.파일 내용을 읽는 프로그램이 필요하고, 이 기록을 정렬한 후 파일을 출력해야 하며, 메모리는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.