服务器和客户端 tcp通信

来源:互联网 发布:知乎日报和读读日报 编辑:程序博客网 时间:2024/05/22 15:26

在vs2013的环境下,服务器代码如下:

#include <stdio.h>  #include "stdafx.h"#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std;#define buffer_rev 1024#define buffer_send 1024int main(){    char buffer1[buffer_rev], buffer2[buffer_send];    //当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库    //然后绑定找到的Socket库到该应用程序中    WORD sockversion;  //winsock规范的最高版本    WSADATA wsadata;  // 用来返回winsock API实现的细节信息    sockversion = MAKEWORD(2, 2);  //生成版本号2.2    WSAStartup(sockversion,&wsadata);    //创建服务器端监听套接字    SOCKET slisten = socket(AF_INET, SOCK_STREAM, 0);   //slisten是创建的监听套接字描述符    //创建服务器端地址    struct sockaddr_in addrser;    addrser.sin_family = AF_INET; // TCP/IP协议族      addrser.sin_addr.S_un.S_addr = inet_addr("0.0.0.0"); // socket对应的IP地址      addrser.sin_port = htons(1234); // socket对应的端口    //绑定套接字并监听    bind(slisten, (sockaddr*)&addrser,sizeof(addrser));    listen(slisten, 5);    //客户端地址    struct sockaddr_in addrclient;    int lenclient = sizeof(addrclient);    while (1)       //持续监听    {        SOCKET sockAcpt = accept(slisten,(sockaddr*)&addrclient, &lenclient); //创建连接套接字        recv(sockAcpt, buffer1, sizeof(buffer1), 0);        printf("接收到的数据是: %s", buffer1);        send(sockAcpt, "hello world", strlen("hello world") + 1, 0);        closesocket(sockAcpt); //关闭连接套接字    }    closesocket(slisten); //关闭监听套接字    WSACleanup();  //解除与Socket库的绑定并且释放Socket库所占用的系统资源    return 0;}

服务器端代码:

// client_myself.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>  #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std;#define buffer_send 1024#define buffer_rev 1024char buffer1[buffer_send],buffer2[buffer_rev];int main(){    WORD sockversion;     WSADATA wsadata;      sockversion = MAKEWORD(2, 2);     WSAStartup(sockversion, &wsadata);    SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);//绑定客户端套接字    SOCKADDR_IN addrser;    addrser.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    addrser.sin_family = AF_INET;    addrser.sin_port = htons(1234);    connect(sockClient, (sockaddr*)&addrser, sizeof(addrser));//请求连接    send(sockClient, "hello world",strlen("hello world") + 1, 0);    recv(sockClient, buffer2, sizeof(buffer2), 0);    printf("接收到的数据是: %s", buffer2);    closesocket(sockClient);    WSACleanup();    return 0;}
0 0
原创粉丝点击