对!客户端也可以使用 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编程实现回声客户端所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)