windows socket 编程
2016-03-13 16:20
218 查看
运行环境为: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[]) { //初始化WSA WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (WSAStartup(sockVersion, &wsaData) != 0) { return 0; } //创建Socket SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (server == INVALID_SOCKET) { printf("socket error"); return 0; } //绑定IP和端口 sockaddr_in sin; 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_in remoteAddr; 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[]) { //初始化WSA WORD 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; }
相关文章推荐
- 20145239杜文超 《Java程序设计》第2周学习总结
- C++静态库与动态库
- JAVA类集学习笔记
- 使用JDK自带的工具将中文转换为ascii码
- C# 函数-传值
- C++ 基础复习 1
- 100 numpy exercises
- ftp配置
- 操作系统可变分区用C语言实现按最佳适应算法分配内存
- NumPy的教程--数组,基本运算
- utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
- JAVA设计模式(09):结构型-代理模式(Proxy)
- 深入解析Python中的list列表及其切片和迭代操作
- Java源码之ConcurrentHashMap
- java 容器类 collection 泛型
- Eclipse中10个最有用的快捷键组合
- C++ decltype类型说明符
- java学习笔记知识点整理01
- java基础 抽象类和接口
- Java NIO 选择器(Selector)的内部实现(poll epoll)