一、UDP(数据报)协议
UDP: User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
1.1Server(服务器):接收端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
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;
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 <WinSock2.h>
#include <iostream>
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));
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(传输控制)协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2.1Server(服务器端):
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define PORT 8233
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 = {2};
sa.sin_port = htons(PORT);
sa.sin_addr.S_un.S_addr = 0;
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 <WinSock2.h>
#include <iostream>
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)