超级详细的客户端服务器简单通信

来源:互联网 发布:oracle distinct 优化 编辑:程序博客网 时间:2024/06/03 17:40

**

超级详细的客户端服务器简单通信

**

面向连接的应用程序流程图
通信流程图

//Service端#include <iostream>#include <WinSock2.h>#pragma comment(lib,"ws2_32") //Windows Sockets应用程序接口using namespace std;#define maxLen 4096   //最大字段长度enum {PORT=19111};   //选择较大的端口号即可int main(){    WSADATA wd;  //用来存储被WSAStartup函数调用后返回的Windows Sockets数据    WSAStartup(0x0202, &wd); //完成Winsock服务的初始化    //socket根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源    //建立socket通信描述符并返回    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);      //指明地址信息   AF_INET:IPv4 网络协议的套接字类型    //htons()将整型变量从主机字节顺序转变成网络字节顺序    sockaddr_in sa = { AF_INET, htons(PORT) };      //将套接字与机器上一定的端口关联    int n = bind(sock, (sockaddr*)&sa, sizeof(sa));    if (n < 0){ //返回值小于0出错        cout << GetLastError() << endl;        return -1;    }    //创建一个套接口并监听申请的连接.    //5:等待连接队列的最大长度。    listen(sock, 5);    int nLen = sizeof(sa);    while (true){        //接受连接,一旦有客户端发出连接,accept返回客户地址信息和一个新的socket,根据这个socket双方就可以开始收发数据        SOCKET socka = accept(sock, (sockaddr*)&sa, &nLen);        while (true){            char buf[maxLen];   //缓存区            //从一个套接口接收数据并缓存到buf中,返回数据长度            n = recv(socka, buf, sizeof(buf), 0);            if (n <= 0)   //出错终止                break;              buf[n] = 0;   //尾部添加结束符            cout << buf << endl;  ///输出        }    }    return 0;}//Client端#include <iostream>#include <WinSock2.h>#pragma comment(lib,"ws2_32")using namespace std;#define maxLen 4096enum { PORT = 19111 };  int main(){    WSADATA wd;    WSAStartup(0x0202, &wd);    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);    sockaddr_in sa = { AF_INET, htons(PORT) };    //127.0.0.1 回环地址,设置服务器端的IP地址    //inet_addr() 把一个IP地址格式“A.B.C.D”转换成32bit的网络字节顺序    sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    //用于建立与指定socket的连接。    int n = connect(sock, (sockaddr*)&sa, sizeof(sa));    if (n < 0){        cout << GetLastError() << endl;        return -1;    }    char buf[maxLen];    while (true){        cout << "请输入你要发送的文字【#退出】:";        cin >> buf;        //向一个已经连接的socket发送数据        send(sock, buf, strlen(buf), 0);        if (buf[0] == '#')            break;    }    return 0;}[测试数据](http://img.blog.csdn.net/20171031112417466?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbml1MTUyNzMxMjIyOTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 u盘延缓写入失败怎么办 手机提示sd卡不可用怎么办 显示sd卡不可用怎么办 小米手机检测不到sd卡怎么办 小米手机sd卡写入失败怎么办 没有检测到sd卡怎么办 e站图片配额用尽怎么办 内存卡密码忘了怎么办 电脑上酷狗音乐播放失败怎么办 播放失败不支持该文件怎么办 手机山寨云资源失效怎么办 支付密码输错了怎么办 微信密码锁定了怎么办 电脑网易云音乐闪退怎么办 逆战耳机电流声怎么办 肠道感染一直吃药治不好怎么办 如果24小时以后还没到账该怎么办 在游戏平台充值没到账该怎么办 充值豪华黄钻没到账该怎么办 起点签到签满了怎么办 ipad锁屏声音小怎么办 扣扣邮箱文件超大了怎么办 网易邮箱图片已过期怎么办 邮箱里面的文件过期了怎么办 邮箱发的文件过期了怎么办 邮箱发送的文件过期怎么办 小米4s开不开机怎么办 小米平板关机后开不开机怎么办 公司老板跑路了社保怎么办 公司老板跑路社保怎么办 公司被公安局查封社保怎么办 小米四开不了机怎么办 小米的手机后壳裂了怎么办 公司没钱拖欠员工社保怎么办 小米note充不进去电怎么办 公司欠社保没交怎么办 公司不给转社保怎么办 小米note充电特别慢怎么办 小米小米note2充电慢怎么办 小米note充电红灯不闪烁怎么办 小米note充电红灯闪烁怎么办