socket编程实现回声客户端

socket编程实现回声客户端,第1张

概述所谓回声,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被反d回来。 对!客户端也可以使用 write() / send() 函数向服务器发送数 所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反d回来”。

对!客户端也可以使用 write() / send() 函数向服务器发送数据,服务器也可以使用 read() / recv() 函数接收数据。

考虑到大部分初学者使用 windows *** 作系统,本节将实现 windows 下的回声程序,linux 下稍作修改即可,不再给出代码。

服务器端 server.cpp:
#include <stdio.h>#include <winsock2.h>#pragma comment (lib,"ws2_32.lib")  //加载 ws2_32.dll#define BUF_SIZE 100int main(){    WSADATA wsaData;    WSAStartup( MAKEWORD(2,2),&wsaData);    //创建套接字    SOCKET servSock = socket(AF_INET,SOCK_STREAM,0);    //绑定套接字    sockaddr_in sockAddr;    memset(&sockAddr,sizeof(sockAddr));  //每个字节都用0填充    sockAddr.sin_family = PF_INET;  //使用IPv4地址    sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址    sockAddr.sin_port = htons(1234);  //端口    bind(servSock,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR));    //进入监听状态    Listen(servSock,20);    //接收客户端请求    SOCKADDR clntAddr;    int nSize = sizeof(SOCKADDR);    SOCKET clntSock = accept(servSock,(SOCKADDR*)&clntAddr,&nSize);    char buffer[BUF_SIZE];  //缓冲区    int strLen = recv(clntSock,buffer,BUF_SIZE,0);  //接收客户端发来的数据    send(clntSock,strLen,0);  //将数据原样返回    //关闭套接字    closesocket(clntSock);    closesocket(servSock);    //终止 DLL 的使用    WSACleanup();    return 0;}

客户端 clIEnt.cpp:
#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")  //加载 ws2_32.dll#define BUF_SIZE 100int main(){    //初始化DLL    WSADATA wsaData;    WSAStartup(MAKEWORD(2,&wsaData);    //创建套接字    SOCKET sock = socket(PF_INET,IPPROTO_TCP);    //向服务器发起请求    sockaddr_in sockAddr;    memset(&sockAddr,sizeof(sockAddr));  //每个字节都用0填充    sockAddr.sin_family = PF_INET;    sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");    sockAddr.sin_port = htons(1234);    connect(sock,sizeof(SOCKADDR));    //获取用户输入的字符串并发送给服务器    char bufSend[BUF_SIZE] = {0};    printf("input a string: ");    scanf("%s",bufSend);    send(sock,bufSend,strlen(bufSend),0);    //接收服务器传回的数据    char bufRecv[BUF_SIZE] = {0};    recv(sock,bufRecv,0);    //输出接收到的数据    printf("Message form server: %s\n",bufRecv);    //关闭套接字    closesocket(sock);    //终止使用 DLL    WSACleanup();    system("pause");    return 0;}
先运行服务器端,再运行客户端,执行结果为:
input a string: c-language java cpp↙
Message form server: c-language

scanf() 读取到空格时认为一个字符串输入结束,所以只能读取到“c-language”;如果不希望把空格作为字符串的结束符,可以使用 gets() 函数。

通过本程序可以发现,客户端也可以向服务器端发送数据,这样服务器端就可以根据不同的请求作出不同的响应,http 服务器就是典型的例子,请求的网址不同,返回的页面也不同。 总结

以上是内存溢出为你收集整理的socket编程实现回声客户端全部内容,希望文章能够帮你解决socket编程实现回声客户端所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1235221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存