C 언어는 Windows에서 socket 프로그래밍을 실현합니다
1. UDP 프로토콜
UDP: User Datagram Protocol의 약칭으로 중국어 이름은 사용자 데이터 보고 프로토콜이고 OSI(Open System Interconnection, 개방식 시스템 상호연결) 참고 모델 중 연결이 없는 전송층 프로토콜로 사무를 위한 간단하고 신뢰할 수 없는 정보 전송 서비스를 제공합니다.
1.1 Server(서버): 수신자
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData); // Socket
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);//UDP
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
sa.sin_port = htons(PORT);//
sa.sin_addr.s_addr = 0;// IP
// socket (IP )
int n = bind(sock, (sockaddr*)&sa, sizeof(sa));
if (SOCKET_ERROR == n)
{
cout << " :" << WSAGetLastError() << endl;
return -1;
}
char str[100];
sockaddr_in from; // ( )
int lenFrom = sizeof(from);
// , "#"
while (true)
{
n = recvfrom(sock, str, sizeof(str), 0, (sockaddr*)&from, &lenFrom);
if (strcmp(str, "#") == 0)
break;
cout << "IP:" << inet_ntoa(from.sin_addr) << "PORT:" << htons(from.sin_port) << endl;;
str[n] = 0;
cout << str << endl;;
}
closesocket(sock);
WSACleanup();
return 0;
}
1.2Client(클라이언트): 발송자
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 3473
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData);
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
sa.sin_port = htons(PORT);
sa.sin_addr.s_addr = 0;
bind(sock, (sockaddr*)&sa, sizeof(sa));
// (IP )
sockaddr_in to = { AF_INET };
to.sin_port = htons(8233);
to.sin_addr.s_addr = inet_addr("127.0.0.1");
char str[100];
while (true)
{
cin >> str; //
sendto(sock, str, strlen(str), 0, (sockaddr*)&to, sizeof(to));
if (strcmp(str, "#") == 0)
break;
}
closesocket(sock);
WSACleanup();
return 0;
}
2. TCP(전송 제어) 프로토콜
TCP(Transmission Control Protocol 전송 제어 프로토콜)는 연결을 위한 신뢰할 수 있는 바이트 흐름을 바탕으로 하는 전송층 통신 프로토콜이다.
2.1Server(서버쪽):
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData); // Socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//UDP
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {2};
sa.sin_port = htons(PORT);//
sa.sin_addr.S_un.S_addr = 0;// IP
int n = bind(sock, (sockaddr*)&sa, sizeof(sa));
if (SOCKET_ERROR == n)
{
cout << " :" << WSAGetLastError() << endl;
return -1;
}
//
listen(sock, 5);
SOCKET socka = INVALID_SOCKET;
char str[2048];
while (true)
{
socka = accept(sock, NULL, NULL);
const char* p = "Welcome to connect";
send(socka, p, strlen(p), 0);
while (true)
{
int n = recv(socka, str, sizeof(str), 0);
if (n <= 0)
break;
str[n] = 0;
cout << str << endl;
}
}
closesocket(socka);
closesocket(sock);
WSACleanup();
return 0;
}
2.2Client(클라이언트):
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 3473
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
bind(sock, (sockaddr*)&sa, sizeof(sa));
//
sockaddr_in to = { AF_INET};
to.sin_port = htons(8233);
to.sin_addr.s_addr = inet_addr("127.0.0.1");
//
int n = connect(sock, (sockaddr*)&to, sizeof(to));
if (n == SOCKET_ERROR)
{
cout << " :" << GetLastError() << endl;
return -1;
}
char str[2048];
n = recv(sock, str, sizeof(str), 0);
str[n] = 0;
cout << str << endl;
while (true)
{
cout << " :";
cin >> str;
if (strcmp(str, "#") == 0)
break;
send(sock, str, strlen(str), 0);
}
closesocket(sock);
WSACleanup();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData); // Socket
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);//UDP
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
sa.sin_port = htons(PORT);//
sa.sin_addr.s_addr = 0;// IP
// socket (IP )
int n = bind(sock, (sockaddr*)&sa, sizeof(sa));
if (SOCKET_ERROR == n)
{
cout << " :" << WSAGetLastError() << endl;
return -1;
}
char str[100];
sockaddr_in from; // ( )
int lenFrom = sizeof(from);
// , "#"
while (true)
{
n = recvfrom(sock, str, sizeof(str), 0, (sockaddr*)&from, &lenFrom);
if (strcmp(str, "#") == 0)
break;
cout << "IP:" << inet_ntoa(from.sin_addr) << "PORT:" << htons(from.sin_port) << endl;;
str[n] = 0;
cout << str << endl;;
}
closesocket(sock);
WSACleanup();
return 0;
}
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 3473
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData);
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
sa.sin_port = htons(PORT);
sa.sin_addr.s_addr = 0;
bind(sock, (sockaddr*)&sa, sizeof(sa));
// (IP )
sockaddr_in to = { AF_INET };
to.sin_port = htons(8233);
to.sin_addr.s_addr = inet_addr("127.0.0.1");
char str[100];
while (true)
{
cin >> str; //
sendto(sock, str, strlen(str), 0, (sockaddr*)&to, sizeof(to));
if (strcmp(str, "#") == 0)
break;
}
closesocket(sock);
WSACleanup();
return 0;
}
TCP(Transmission Control Protocol 전송 제어 프로토콜)는 연결을 위한 신뢰할 수 있는 바이트 흐름을 바탕으로 하는 전송층 통신 프로토콜이다.
2.1Server(서버쪽):
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData); // Socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//UDP
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {2};
sa.sin_port = htons(PORT);//
sa.sin_addr.S_un.S_addr = 0;// IP
int n = bind(sock, (sockaddr*)&sa, sizeof(sa));
if (SOCKET_ERROR == n)
{
cout << " :" << WSAGetLastError() << endl;
return -1;
}
//
listen(sock, 5);
SOCKET socka = INVALID_SOCKET;
char str[2048];
while (true)
{
socka = accept(sock, NULL, NULL);
const char* p = "Welcome to connect";
send(socka, p, strlen(p), 0);
while (true)
{
int n = recv(socka, str, sizeof(str), 0);
if (n <= 0)
break;
str[n] = 0;
cout << str << endl;
}
}
closesocket(socka);
closesocket(sock);
WSACleanup();
return 0;
}
2.2Client(클라이언트):
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 3473
int main()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == sock)
{
cout << " socket :" << WSAGetLastError() << endl;
return -1;
}
sockaddr_in sa = {AF_INET};
bind(sock, (sockaddr*)&sa, sizeof(sa));
//
sockaddr_in to = { AF_INET};
to.sin_port = htons(8233);
to.sin_addr.s_addr = inet_addr("127.0.0.1");
//
int n = connect(sock, (sockaddr*)&to, sizeof(to));
if (n == SOCKET_ERROR)
{
cout << " :" << GetLastError() << endl;
return -1;
}
char str[2048];
n = recv(sock, str, sizeof(str), 0);
str[n] = 0;
cout << str << endl;
while (true)
{
cout << " :";
cin >> str;
if (strcmp(str, "#") == 0)
break;
send(sock, str, strlen(str), 0);
}
closesocket(sock);
WSACleanup();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.