前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程。使用TCP  和  UDP  两种协议。

OK,先来看一下TCP服务器和客户端:

[cpp] view plaincopy
  1. /**************************************************
  2. 文件名server.cpp
  3. windows下socket网络编程实例  -- 服务器端基于TCP
  4. 服务器地址:'127.0.0.1'
  5. 端口号 8888
  6. 作者:peter
  7. ***************************************************/
  8. #include<WinSock2.h>
  9. #include<stdio.h>
  10. #pragma comment(lib,"WS2_32.lib")
  11. int main(int argc, char* argv[])
  12. {
  13. WSADATA wsaData;
  14. WORD sockVersion = MAKEWORD(2,0);//指定版本号
  15. ::WSAStartup(sockVersion, &wsaData);//载入winsock的dll
  16. //创建套接字基于TCP
  17. SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  18. if(s == INVALID_SOCKET)
  19. {
  20. printf("error");
  21. ::WSACleanup();//清理,释放资源
  22. return 0;
  23. }
  24. sockaddr_in sin;
  25. sin.sin_family = AF_INET;
  26. sin.sin_port = htons(8888);//端口号8888
  27. sin.sin_addr.S_un.S_addr = INADDR_ANY;//地址全是0,也就是所有的地址
  28. //绑定socket
  29. if(::bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
  30. {
  31. printf("error");
  32. ::WSACleanup();//清理释放资源
  33. return 0;
  34. }
  35. //监听socket
  36. if(::listen(s, 2) == SOCKET_ERROR)
  37. {
  38. printf("error");
  39. ::WSACleanup();//释放资源
  40. return 0;
  41. }
  42. sockaddr_in remoteAddr;
  43. int nAddrLen = sizeof(remoteAddr);
  44. SOCKET client;
  45. char szText[] = "peter\n";//缓冲区数据
  46. while(1)
  47. {
  48. /*accept服务器端使用,调用函数进入阻塞状态,等待用户连接,如果没有客户端进行连接,程序就在这个地方。
  49. 不会看到后面。如果有客户端连接,那么程序就执行一次然后继续循环到这里等待。*/
  50. client = ::accept(s, (SOCKADDR*)&remoteAddr, &nAddrLen);
  51. if(client == INVALID_SOCKET)
  52. {
  53. printf("error");
  54. continue;
  55. }
  56. printf("接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));
  57. ::send(client, szText, strlen(szText), 0); //发送数据
  58. ::closesocket(client);//关闭套接字
  59. }
  60. ::closesocket(s);
  61. ::WSACleanup();
  62. return 0;
  63. }
[cpp] view plaincopy
  1. /**************************************************
  2. 文件名client.cpp
  3. windows下socket网络编程实例  -- 客户端基于TCP
  4. 服务器地址:'127.0.0.1'
  5. 端口号 8888
  6. 作者:peter
  7. ***************************************************/
  8. #include<WinSock2.h>
  9. #include<stdio.h>
  10. #pragma comment(lib, "WS2_32.lib")
  11. int main(int argc, char* argv[])
  12. {
  13. WSADATA wsaData;
  14. WORD sockVersion = MAKEWORD(2,0);//指定版本号
  15. ::WSAStartup(sockVersion, &wsaData);//载入winsock的dll
  16. //建立socket,基于tcp
  17. SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  18. if(s == INVALID_SOCKET)
  19. {
  20. printf("error");
  21. ::WSACleanup(); //释放资源
  22. return 0;
  23. }
  24. sockaddr_in servAddr;
  25. servAddr.sin_family = AF_INET;
  26. servAddr.sin_port = htons(8888);//端口号
  27. servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP
  28. //连接
  29. if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
  30. {
  31. printf("error");
  32. ::WSACleanup(); //释放资源
  33. return 0;
  34. }
  35. char buff[156];//缓冲区
  36. int nRecv = ::recv(s, buff, 156, 0);//接收数据
  37. if(nRecv > 0)
  38. {
  39. buff[nRecv] = '\0';
  40. printf("接受数据:%s",buff);
  41. }
  42. ::closesocket(s); //关闭套接字
  43. ::WSACleanup(); //释放资源
  44. return 0;
  45. }

好了下面是基于UDP的服务器和客户端:

[cpp] view plaincopy
  1. /**************************************************
  2. 文件名udpserver.cpp
  3. windows下socket网络编程实例  -- 服务器端基于UDP
  4. 服务器地址:'127.0.0.1'
  5. 端口号 8888
  6. 作者:peter
  7. ***************************************************/
  8. #include<iostream>
  9. #include<WinSock2.h>
  10. using namespace std;
  11. #pragma comment(lib,"WS2_32.lib")
  12. void main(void)
  13. {
  14. WSADATA data;
  15. WORD w = MAKEWORD(2,0);//版本号
  16. ::WSAStartup(w, &data);//载入winsock的dll
  17. SOCKET sock;
  18. //创建socket,基于UDP
  19. sock = ::socket(AF_INET, SOCK_DGRAM, 0);
  20. sockaddr_in addr;
  21. addr.sin_family = AF_INET;
  22. addr.sin_port = htons(8888);//端口号8888
  23. addr.sin_addr.S_un.S_addr = INADDR_ANY;//全置为0,表示都可以
  24. //绑定socket
  25. if(::bind(sock, (sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR)
  26. {
  27. cout << "服务器启动成功~" << endl;
  28. }
  29. else
  30. {
  31. //清理工作
  32. ::closesocket(sock);
  33. ::WSACleanup();
  34. return ;
  35. }
  36. char text[10] = {0};
  37. char stext[] = "Welcome!";
  38. sockaddr_in addrs;
  39. int n = sizeof(addrs);
  40. while(true)
  41. {
  42. //发送数据
  43. if(::recvfrom(sock, text, 10, 0, (sockaddr*)&addrs, &n) != 0)
  44. {
  45. cout << inet_ntoa(addrs.sin_addr) << "已经连接上" << endl;
  46. cout << text << endl;
  47. //接受数据
  48. ::sendto(sock, stext, sizeof(stext), 0, (sockaddr*)&addrs, n);
  49. break;
  50. }
  51. }
  52. ::closesocket(sock);
  53. ::WSACleanup();
  54. }
[cpp] view plaincopy
  1. /**************************************************
  2. 文件名udpclient.cpp
  3. windows下socket网络编程实例  -- 客户端基于UDP
  4. 服务器地址:'127.0.0.1'
  5. 端口号 8888
  6. 作者:peter
  7. ***************************************************/
  8. #include<winsock2.h>
  9. #include<iostream>
  10. using namespace std;
  11. #pragma comment(lib,"WS2_32.lib")
  12. void main(void)
  13. {
  14. WSADATA data;
  15. WORD w = MAKEWORD(2,0);//版本号
  16. ::WSAStartup(w, &data);//载入winsock的dll
  17. SOCKET sock;
  18. //建立socket,基于UDP
  19. sock = ::socket(AF_INET, SOCK_DGRAM, 0);
  20. sockaddr_in addr;
  21. addr.sin_family = AF_INET;
  22. addr.sin_port = htons(8888);//端口号
  23. addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//ip地址
  24. //绑定socket
  25. if(::bind(sock, (sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR)
  26. {
  27. cout << "客户端开启成功~" << endl;
  28. }
  29. else
  30. {
  31. //清理工作
  32. ::closesocket(sock);
  33. ::WSACleanup();
  34. return ;
  35. }
  36. sockaddr_in addrs;
  37. char text[10] = {0};
  38. char stext[] = "ssss!";
  39. int n = sizeof(addrs);
  40. //发送数据
  41. if(::sendto(sock, stext, sizeof(stext), 0, (sockaddr*)&addr, sizeof(addr)) != 0)
  42. {
  43. //接受数据
  44. ::recvfrom(sock, text, 10, 0, (sockaddr*)&addrs, &n);
  45. cout << "服务器说: " << text << endl;
  46. ::closesocket(sock);
  47. ::WSACleanup();
  48. }
  49. }

代码在VS2010下编译通过;

2012/8/15

jofranks  于南昌

版权声明:本文为博主原创文章,未经博主允许不得转载。

【网络编程】之四、socket网络编程例解相关推荐

  1. 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发

    深入分析websocket协议,从3个方面设计网络应用层协议 视频讲解如下: 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/ ...

  2. day014 网络编程【Socket网络编程】

    1 网络通信协议 1.1 IP地址 1.2 端口号 1.3 InetAddress基本使用 在java中,可以使用一个类表示ip地址,这个类叫做InetAddress static InetAddre ...

  3. Java网络编程之Socket和ServerSocket详解

    Socket Socket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点. Socket的实际工作由SocketImpl类的实例执行 .通过更改用于创建套接字实现的套接字工厂,应用程序可 ...

  4. 开放式社交网络(OSN网络)之四:OSN网络的运行原理

    开放式社交网络(OSN网络)之四 OSN网络的运行原理   当企业的服务器以节点形式加入了OSN网络以后,用户如何与企业服务器以外的其他用户通信? 假设现在有APP1和APP2两款APP都加入了OSN ...

  5. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  6. 5.3linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...

  7. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  8. 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)

    C++ Socket网络编程基础详解(TCP版) ​    网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...

  9. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

最新文章

  1. python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数
  2. mysql 主从 编码_Mysql 主从复制
  3. java 异常处理 return,求大神!!!!java 异常处理中return的意思
  4. [转帖]Mootools源码分析-03 -- Hash
  5. Python逐行读取文件内容
  6. 配置文件 web.config 的讨论
  7. Pytest框架教程(一)
  8. pandas 菜鸟_再见Numpy,Pandas!又一个数据分析神器横空出现!
  9. ASP.net导出Excel的几种方式
  10. 【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)图像分割【含Matlab源码 154期】
  11. 小米浏览器地址栏欺骗漏洞原理与利用分析
  12. 鲁棒控制(棒棒控制原理)
  13. 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
  14. 未来物联网的一些问题
  15. php控制windows系统关机,window_winXP系统设置一键关机的两种方法,windows系统关机需要三步,对我 - phpStudy...
  16. dos2unix 安装
  17. 百度每个月的收录时间
  18. java 秒表暂停_java – 停止秒表
  19. LambdaMART原理浅析
  20. 乌镇AI论坛最全盘点:中国互联网半壁江山坐在了一起,他们怎么看AI

热门文章

  1. MapReduce分区-原理
  2. 部署RocketMQ的管理工具
  3. 数据库-优化-数据库结构的优化-数据类型
  4. 类型上限_类型或可成为影视市场下一红利点__枫筹网
  5. android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
  6. 【报错笔记】maven项目启动时报错
  7. 【报错笔记】在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。
  8. 常用软件滤波算法---摘自:FeoTech
  9. 2019年我总结的前端面试题
  10. WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎