#include "pch.h"
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void initialization();
//tcp--客户端代码
//使用网络调试助手做服务端
//int main() {
// //定义长度变量
// int send_len = 0;
// int recv_len = 0;
// //定义发送缓冲区和接受缓冲区
// char send_buf[100];
// char recv_buf[100];
// //定义服务端套接字,接受请求套接字
// SOCKET s_server;
// //服务端地址客户端地址
// SOCKADDR_IN server_addr;
// initialization();
// //填充服务端信息
// server_addr.sin_family = AF_INET;
// server_addr.sin_addr.S_un.S_addr = inet_addr("10.13.134.115");
// server_addr.sin_port = htons(8080);
// //创建套接字
// s_server = socket(AF_INET, SOCK_STREAM, 0);
// if (connect(s_server, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
// cout << "服务器连接失败!" << endl;
// WSACleanup();
// }
// else {
// cout << "服务器连接成功!" << endl;
// }
//
// //发送,接收数据
// while (1) {
// cout << "请输入发送信息:";
// cin >> send_buf;
// send_len = send(s_server, send_buf, 100, 0);
// if (send_len < 0) {
// cout << "发送失败!" << endl;
// break;
// }
// recv_len = recv(s_server, recv_buf, 100, 0);
// if (recv_len < 0) {
// cout << "接受失败!" << endl;
// break;
// }
// else {
// cout << "服务端信息:" << recv_buf << endl;
// }
//
// }
// //关闭套接字
// closesocket(s_server);
// //释放DLL资源
// WSACleanup();
// return 0;
//}
void initialization() {
//初始化套接字库
WORD w_req = MAKEWORD(2, 2);//版本号
WSADATA wsadata;
int err;
err = WSAStartup(w_req, &wsadata);
if (err != 0) {
cout << "初始化套接字库失败!" << endl;
}
else {
cout << "初始化套接字库成功!" << endl;
}
//检测版本号
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {
cout << "套接字库版本号不符!" << endl;
WSACleanup();
}
else {
cout << "套接字库版本正确!" << endl;
}
//填充服务端地址信息
}
//tcp--服务端代码
//使用网络调试助手做客户端
//int main() {
// //定义长度变量
// int send_len = 0;
// int recv_len = 0;
// int len = 0;
// //定义发送缓冲区和接受缓冲区
// char send_buf[100];
// char recv_buf[100];
// //定义服务端套接字,接受请求套接字
// SOCKET s_server;
// SOCKET s_accept;
// //服务端地址客户端地址
// SOCKADDR_IN server_addr;
// SOCKADDR_IN accept_addr;
// initialization();
// //填充服务端信息
// server_addr.sin_family = AF_INET;
// server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
// server_addr.sin_port = htons(8080);
// //创建套接字
// s_server = socket(AF_INET, SOCK_STREAM, 0);
// if (bind(s_server, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
// cout << "套接字绑定失败!" << endl;
// WSACleanup();
// }
// else {
// cout << "套接字绑定成功!" << endl;
// }
// //设置套接字为监听状态
// if (listen(s_server, SOMAXCONN) < 0) {
// cout << "设置监听状态失败!" << endl;
// WSACleanup();
// }
// else {
// cout << "设置监听状态成功!" << endl;
// }
// cout << "服务端正在监听连接,请稍候...." << endl;
// //接受连接请求
// len = sizeof(SOCKADDR);
// s_accept = accept(s_server, (SOCKADDR*)&accept_addr, &len);
// if (s_accept == SOCKET_ERROR) {
// cout << "连接失败!" << endl;
// WSACleanup();
// return 0;
// }
// cout << "连接建立,准备接受数据" << endl;
// //接收数据
// while (1) {
// memset(recv_buf, 0, 100);
// memset(send_buf, 0, 100);
// recv_len = recv(s_accept, recv_buf, 100, 0);
// if (recv_len < 0) {
// cout << "接受失败!" << endl;
// break;
// }
// else {
// cout << "客户端信息:" << recv_buf << endl;
// }
// cout << "请输入回复信息:";
// cin >> send_buf;
// send_len = send(s_accept, send_buf, 100, 0);
// if (send_len < 0) {
// cout << "发送失败!" << endl;
// break;
// }
// }
// //关闭套接字
// closesocket(s_server);
// closesocket(s_accept);
// //释放DLL资源
// WSACleanup();
// return 0;
//}
//UDP编程
int main() {
//定义长度变量
int send_len = 0;
int recv_len = 0;
//定义发送缓冲区和接受缓冲区
char send_buf[100];
char recv_buf[100];
//找一个网络调试助手,使用下面的UDP发送数据,可以接收到,亲测。
发送端操作---做客户端
//SOCKET s_send;
//SOCKADDR_IN silocal;
//initialization();
//silocal.sin_family = AF_INET;
//silocal.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//silocal.sin_port = htons(5000);
创建套接字
//s_send = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//if (s_send == SOCKET_ERROR)
//{
// cout << "socket create failed!" << endl;
//}
//while (1) {
// cout << "请输入发送信息:";
// cin >> send_buf;
// int len = sizeof(SOCKADDR);
// send_len = sendto(s_send, send_buf, strlen(send_buf) + 1, 0, (SOCKADDR*)&silocal, len);
// if (send_len < 0) {
// cout << "发送失败!" << endl;
// break;
// }
//}
关闭套接字
//closesocket(s_send);
释放DLL资源
//WSACleanup();
//接收端操作---做服务端
SOCKET s_recv;
SOCKADDR_IN siremote, silocal;
initialization();
//创建套接字
s_recv = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s_recv == SOCKET_ERROR)
{
cout << "socket create failed!" << endl;
}
silocal.sin_family = AF_INET;
silocal.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//htonl(INADDR_ANY);
silocal.sin_port = htons(5001);
if (bind(s_recv, (SOCKADDR*)&silocal, sizeof(silocal)) == SOCKET_ERROR)
{
cout << " udp bind failed! " << endl;
WSACleanup();
}
//发送,接收数据
while (1) {
int len = sizeof(siremote);
recv_len = recvfrom(s_recv, recv_buf, strlen(recv_buf)+1, 0, (SOCKADDR*)&silocal, &len);
if (recv_len < 0) {
cout << "接受失败!" << endl;
break;
}
else {
cout << "服务端信息:" << recv_buf << endl;
}
}
//关闭套接字
closesocket(s_recv);
//释放DLL资源
WSACleanup();
return 0;
}
TCP/UDP编程实践--终于整明白一些了
最新推荐文章于 2024-08-20 18:48:01 发布