windows socket 编程

来源:互联网 发布:深圳壹基金知乎 编辑:程序博客网 时间:2024/06/07 04:48

运行环境为:visual studio ,如果在inet_ntoa处报错,可以看看这篇文章点击打开链接

服务器:

// server.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <WinSock2.h>#pragma  comment(lib ,"ws2_32.lib")int main(int argc,char *argv[]){//初始化WSAWORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVersion, &wsaData) != 0) {return 0;}//创建SocketSOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (server == INVALID_SOCKET) {printf("socket error");return 0;}//绑定IP和端口sockaddr_insin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = INADDR_ANY;if (bind(server, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) {printf("bind error");return 0;}//监听if (listen(server, 5) == SOCKET_ERROR) {printf("listen error");return 0;}SOCKET client;sockaddr_inremoteAddr;int nAddrlen = sizeof(remoteAddr);char revData[255];//接受数据while (true) {printf("等待连接中...\n");client = accept(server, (SOCKADDR*)&remoteAddr, &nAddrlen);if (client == INVALID_SOCKET) {printf("accept error");continue;}printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));int ret = recv(client, revData, 255, 0);if (ret > 0) {revData[ret] = 0x00;printf("从客户端获得数据%s\n", revData);if (strcmp(revData, "yzr") == 0) {char * sendData = "你好,你的学号是146xxxxxxx";send(client, sendData, strlen(sendData), 0);}else {char * sendData = "抱歉,未找到你的学号数据";send(client, sendData, strlen(sendData), 0);}}closesocket(client);}closesocket(server);WSACleanup();    return 0;}


客户端

#include "stdafx.h"#include <WinSock2.h>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")int main(int argc, char *argv[]){//初始化WSAWORD sockVersiono = MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVersiono, &wsaData) != 0) {printf("初始化错误!\n");return 0;}//创建套接字SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (client == INVALID_SOCKET) {printf("创建Socket失败!\n");return 0;}//填入服务器地址sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(8888);serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//连接服务器if (connect(client, (sockaddr*)&serverAddr, sizeof(serverAddr))) {printf("连接错误!\n");closesocket(client);return 0;}printf("连接成功!!请输入你需要发送的数据:");//输入数据并发送至服务器char sendData[255];fgets(sendData, 255, stdin);send(client, sendData, strlen(sendData), 0);//接受服务器返回的数据char revData[255];int ret = recv(client, revData, 255, 0);if (ret > 0) {revData[ret] = 0x00;printf("从服务器获得返回数据:%s",revData);}system("pause");closesocket(client);WSACleanup();return 0;}



0 0