【网络编程】之四、socket网络编程例解
前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程。使用TCP 和 UDP 两种协议。
OK,先来看一下TCP服务器和客户端:
- /**************************************************
- 文件名server.cpp
- windows下socket网络编程实例 -- 服务器端基于TCP
- 服务器地址:'127.0.0.1'
- 端口号 8888
- 作者:peter
- ***************************************************/
- #include<WinSock2.h>
- #include<stdio.h>
- #pragma comment(lib,"WS2_32.lib")
- int main(int argc, char* argv[])
- {
- WSADATA wsaData;
- WORD sockVersion = MAKEWORD(2,0);//指定版本号
- ::WSAStartup(sockVersion, &wsaData);//载入winsock的dll
- //创建套接字基于TCP
- SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(s == INVALID_SOCKET)
- {
- printf("error");
- ::WSACleanup();//清理,释放资源
- return 0;
- }
- sockaddr_in sin;
- sin.sin_family = AF_INET;
- sin.sin_port = htons(8888);//端口号8888
- sin.sin_addr.S_un.S_addr = INADDR_ANY;//地址全是0,也就是所有的地址
- //绑定socket
- if(::bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
- {
- printf("error");
- ::WSACleanup();//清理释放资源
- return 0;
- }
- //监听socket
- if(::listen(s, 2) == SOCKET_ERROR)
- {
- printf("error");
- ::WSACleanup();//释放资源
- return 0;
- }
- sockaddr_in remoteAddr;
- int nAddrLen = sizeof(remoteAddr);
- SOCKET client;
- char szText[] = "peter\n";//缓冲区数据
- while(1)
- {
- /*accept服务器端使用,调用函数进入阻塞状态,等待用户连接,如果没有客户端进行连接,程序就在这个地方。
- 不会看到后面。如果有客户端连接,那么程序就执行一次然后继续循环到这里等待。*/
- client = ::accept(s, (SOCKADDR*)&remoteAddr, &nAddrLen);
- if(client == INVALID_SOCKET)
- {
- printf("error");
- continue;
- }
- printf("接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));
- ::send(client, szText, strlen(szText), 0); //发送数据
- ::closesocket(client);//关闭套接字
- }
- ::closesocket(s);
- ::WSACleanup();
- return 0;
- }
- /**************************************************
- 文件名client.cpp
- windows下socket网络编程实例 -- 客户端基于TCP
- 服务器地址:'127.0.0.1'
- 端口号 8888
- 作者:peter
- ***************************************************/
- #include<WinSock2.h>
- #include<stdio.h>
- #pragma comment(lib, "WS2_32.lib")
- int main(int argc, char* argv[])
- {
- WSADATA wsaData;
- WORD sockVersion = MAKEWORD(2,0);//指定版本号
- ::WSAStartup(sockVersion, &wsaData);//载入winsock的dll
- //建立socket,基于tcp
- SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(s == INVALID_SOCKET)
- {
- printf("error");
- ::WSACleanup(); //释放资源
- return 0;
- }
- sockaddr_in servAddr;
- servAddr.sin_family = AF_INET;
- servAddr.sin_port = htons(8888);//端口号
- servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP
- //连接
- if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
- {
- printf("error");
- ::WSACleanup(); //释放资源
- return 0;
- }
- char buff[156];//缓冲区
- int nRecv = ::recv(s, buff, 156, 0);//接收数据
- if(nRecv > 0)
- {
- buff[nRecv] = '\0';
- printf("接受数据:%s",buff);
- }
- ::closesocket(s); //关闭套接字
- ::WSACleanup(); //释放资源
- return 0;
- }
好了下面是基于UDP的服务器和客户端:
- /**************************************************
- 文件名udpserver.cpp
- windows下socket网络编程实例 -- 服务器端基于UDP
- 服务器地址:'127.0.0.1'
- 端口号 8888
- 作者:peter
- ***************************************************/
- #include<iostream>
- #include<WinSock2.h>
- using namespace std;
- #pragma comment(lib,"WS2_32.lib")
- void main(void)
- {
- WSADATA data;
- WORD w = MAKEWORD(2,0);//版本号
- ::WSAStartup(w, &data);//载入winsock的dll
- SOCKET sock;
- //创建socket,基于UDP
- sock = ::socket(AF_INET, SOCK_DGRAM, 0);
- sockaddr_in addr;
- addr.sin_family = AF_INET;
- addr.sin_port = htons(8888);//端口号8888
- addr.sin_addr.S_un.S_addr = INADDR_ANY;//全置为0,表示都可以
- //绑定socket
- if(::bind(sock, (sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR)
- {
- cout << "服务器启动成功~" << endl;
- }
- else
- {
- //清理工作
- ::closesocket(sock);
- ::WSACleanup();
- return ;
- }
- char text[10] = {0};
- char stext[] = "Welcome!";
- sockaddr_in addrs;
- int n = sizeof(addrs);
- while(true)
- {
- //发送数据
- if(::recvfrom(sock, text, 10, 0, (sockaddr*)&addrs, &n) != 0)
- {
- cout << inet_ntoa(addrs.sin_addr) << "已经连接上" << endl;
- cout << text << endl;
- //接受数据
- ::sendto(sock, stext, sizeof(stext), 0, (sockaddr*)&addrs, n);
- break;
- }
- }
- ::closesocket(sock);
- ::WSACleanup();
- }
- /**************************************************
- 文件名udpclient.cpp
- windows下socket网络编程实例 -- 客户端基于UDP
- 服务器地址:'127.0.0.1'
- 端口号 8888
- 作者:peter
- ***************************************************/
- #include<winsock2.h>
- #include<iostream>
- using namespace std;
- #pragma comment(lib,"WS2_32.lib")
- void main(void)
- {
- WSADATA data;
- WORD w = MAKEWORD(2,0);//版本号
- ::WSAStartup(w, &data);//载入winsock的dll
- SOCKET sock;
- //建立socket,基于UDP
- sock = ::socket(AF_INET, SOCK_DGRAM, 0);
- sockaddr_in addr;
- addr.sin_family = AF_INET;
- addr.sin_port = htons(8888);//端口号
- addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//ip地址
- //绑定socket
- if(::bind(sock, (sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR)
- {
- cout << "客户端开启成功~" << endl;
- }
- else
- {
- //清理工作
- ::closesocket(sock);
- ::WSACleanup();
- return ;
- }
- sockaddr_in addrs;
- char text[10] = {0};
- char stext[] = "ssss!";
- int n = sizeof(addrs);
- //发送数据
- if(::sendto(sock, stext, sizeof(stext), 0, (sockaddr*)&addr, sizeof(addr)) != 0)
- {
- //接受数据
- ::recvfrom(sock, text, 10, 0, (sockaddr*)&addrs, &n);
- cout << "服务器说: " << text << endl;
- ::closesocket(sock);
- ::WSACleanup();
- }
- }
代码在VS2010下编译通过;
2012/8/15
jofranks 于南昌
版权声明:本文为博主原创文章,未经博主允许不得转载。
【网络编程】之四、socket网络编程例解相关推荐
- 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发
深入分析websocket协议,从3个方面设计网络应用层协议 视频讲解如下: 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/ ...
- day014 网络编程【Socket网络编程】
1 网络通信协议 1.1 IP地址 1.2 端口号 1.3 InetAddress基本使用 在java中,可以使用一个类表示ip地址,这个类叫做InetAddress static InetAddre ...
- Java网络编程之Socket和ServerSocket详解
Socket Socket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点. Socket的实际工作由SocketImpl类的实例执行 .通过更改用于创建套接字实现的套接字工厂,应用程序可 ...
- 开放式社交网络(OSN网络)之四:OSN网络的运行原理
开放式社交网络(OSN网络)之四 OSN网络的运行原理 当企业的服务器以节点形式加入了OSN网络以后,用户如何与企业服务器以外的其他用户通信? 假设现在有APP1和APP2两款APP都加入了OSN ...
- python编程入门与案例详解-Pythony运维入门之Socket网络编程详解
Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...
- 5.3linux下C语言socket网络编程简例
原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)
C++ Socket网络编程基础详解(TCP版) 网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...
- linux下C语言socket网络编程简例
转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...
最新文章
- python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数
- mysql 主从 编码_Mysql 主从复制
- java 异常处理 return,求大神!!!!java 异常处理中return的意思
- [转帖]Mootools源码分析-03 -- Hash
- Python逐行读取文件内容
- 配置文件 web.config 的讨论
- Pytest框架教程(一)
- pandas 菜鸟_再见Numpy,Pandas!又一个数据分析神器横空出现!
- ASP.net导出Excel的几种方式
- 【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)图像分割【含Matlab源码 154期】
- 小米浏览器地址栏欺骗漏洞原理与利用分析
- 鲁棒控制(棒棒控制原理)
- 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
- 未来物联网的一些问题
- php控制windows系统关机,window_winXP系统设置一键关机的两种方法,windows系统关机需要三步,对我 - phpStudy...
- dos2unix 安装
- 百度每个月的收录时间
- java 秒表暂停_java – 停止秒表
- LambdaMART原理浅析
- 乌镇AI论坛最全盘点:中国互联网半壁江山坐在了一起,他们怎么看AI
热门文章
- MapReduce分区-原理
- 部署RocketMQ的管理工具
- 数据库-优化-数据库结构的优化-数据类型
- 类型上限_类型或可成为影视市场下一红利点__枫筹网
- android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
- 【报错笔记】maven项目启动时报错
- 【报错笔记】在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。
- 常用软件滤波算法---摘自:FeoTech
- 2019年我总结的前端面试题
- WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎