TCP/UDP编程实践--终于整明白一些了

#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;
}

 

Guess you like

Origin blog.csdn.net/lxiao428/article/details/106337877