tcp服务端客户端源码及注释

 

/Cpp代码 

//服务端:  

//Cpp代码 

#include <iostream>  

#include <stdio.h>  

#include <windows.h>  

 

using namespace std;  

 

#pragma comment(lib, "WS2_32.lib")  //加载函数库windows socket

 

 

int main()  

{  

    WSADATA wsaData;  

    WORD sockVersion = MAKEWORD(2, 2);  

    SOCKET sListen = 0;  

    sockaddr_in sin  = {0};  

    sockaddr_in remoteAddr = {0};  

    char szText[] = "TCP Server Demo";  

    int nAddrLen = 0;  

 

    nAddrLen = sizeof(sockaddr_in);  

    //fill sin  

    sin.sin_port = htons(4567);  

    sin.sin_family = AF_INET;  

    sin.sin_addr.S_un.S_addr = INADDR_ANY;  

 

    //init wsa  

    if (WSAStartup(sockVersion, &wsaData) != 0)  

    {  

        cout << "initlization failed!" << endl;  

 

        exit(0);  

    }  

 

    sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  

 

    if (bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  

    {  

        cout << "bind failed!" << endl;  

 

        return 0;  

    }  

 

    if (listen(sListen, 2) == SOCKET_ERROR)  

    {  

        cout << "listen failed!" << endl;  

 

        return 0;  

    }  

 

    SOCKET sClient = INADDR_ANY;  

 

    while (true)  

    {  

        sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);  

 

        if (sClient == INVALID_SOCKET)  

        {  

            cout << "accept failed!" << endl;  

 

            continue;  

        }  

 

        send(sClient, szText, strlen(szText), 0);  

 

        closesocket(sClient);   

 

    }  

 

    closesocket(sListen);  

 

    WSACleanup();  

}   

 

 

 

//以上为服务端代码,以下为客户端代码,分开编译

 

 

 

//服务端:

 

#include <iostream>

#include <stdio.h>

#include <windows.h>

 

using namespace std;

 

#pragma comment(lib, "WS2_32.lib")

 

 

int main()

{

 WSADATA wsaData;

 WORD sockVersion = MAKEWORD(2, 2);

 SOCKET sock = 0;

 

 if (WSAStartup(sockVersion, &wsaData) != 0)

 {

  cout << "initlization failed!" << endl;

  exit(0);

 }

 

 sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

 

 if (sock == INVALID_SOCKET)

 {

  cout << "failed socket!" << endl;

 

  return 0;

 }

 

 sockaddr_in sin;

 

 sin.sin_family = AF_INET;

 sin.sin_port = htons(4567);

 sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//本机同时运行客户端与服务端进程,获取本机内部ip

 

 if (connect(sock, (sockaddr*)&sin, sizeof(sockaddr)) == -1)

 {

  cout << "connect failed!" << endl;

 

  return 0;

 }

 

 char buffer[256] = "/0";

 int  nRecv = 0;

 

 nRecv = recv(sock, buffer, 256, 0);

 

 if (nRecv > 0)

 {

  buffer[nRecv] = '/0';

 

  cout << "reveive data: " << buffer << endl;

 }

 

 closesocket(sock);

 

 WSACleanup();

}

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序框架,它提供了丰富的库和工具来帮助开发者创建各种类型的应用程序,包括网络通信应用。 在Qt中实现TCP服务端客户端的通信非常简单。首先,我们需要创建一个QTcpServer对象来作为服务端,该对象负责监听客户端的连接请求。接下来,我们需要为QTcpServer对象绑定一个IP地址和端口号,以便客户端能够连接到该地址和端口。当有新的客户端连接时,QTcpServer对象会发出newConnection()信号。 在服务端的槽函数中,我们可以使用QTcpServer的nextPendingConnection()函数获取新连接的QTcpSocket对象,该对象用于和客户端进行通信。我们可以在该对象上发送和接收数据,以实现服务端客户端之间的数据交互。 接下来,我们需要创建一个QTcpSocket对象作为客户端,该对象负责和服务端建立连接。我们需要使用connectToHost()函数来指定要连接的服务端的IP地址和端口号。一旦连接成功,QTcpSocket对象会发出connected()信号。 在客户端的槽函数中,我们可以使用QTcpSocket对象发送和接收数据。我们可以使用write()函数发送数据,使用readyRead()信号和read()函数接收数据。 通过这种方式,我们可以在服务端客户端之间进行双向的数据通信。服务端可以同时接受多个客户端的连接,每个客户端都可以和服务端进行独立的数据交互。 总的来说,使用Qt实现TCP服务端客户端通信非常方便。通过使用QTcpServer和QTcpSocket类,我们可以轻松地建立连接,发送和接收数据。这种通信方式可以应用于多种场景,如实时聊天、远程控制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值