首先是TCP

server端:
[cpp] view plaincopy
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib,"ws2_32.lib")
  5. int main(int argc, char* argv[])
  6. {
  7. //初始化WSA
  8. WORD sockVersion = MAKEWORD(2,2);
  9. WSADATA wsaData;
  10. if(WSAStartup(sockVersion, &wsaData)!=0)
  11. {
  12. return 0;
  13. }
  14. //创建套接字
  15. SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  16. if(slisten == INVALID_SOCKET)
  17. {
  18. printf("socket error !");
  19. return 0;
  20. }
  21. //绑定IP和端口
  22. sockaddr_in sin;
  23. sin.sin_family = AF_INET;
  24. sin.sin_port = htons(8888);
  25. sin.sin_addr.S_un.S_addr = INADDR_ANY;
  26. if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
  27. {
  28. printf("bind error !");
  29. }
  30. //开始监听
  31. if(listen(slisten, 5) == SOCKET_ERROR)
  32. {
  33. printf("listen error !");
  34. return 0;
  35. }
  36. //循环接收数据
  37. SOCKET sClient;
  38. sockaddr_in remoteAddr;
  39. int nAddrlen = sizeof(remoteAddr);
  40. char revData[255];
  41. while (true)
  42. {
  43. printf("等待连接...\n");
  44. sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
  45. if(sClient == INVALID_SOCKET)
  46. {
  47. printf("accept error !");
  48. continue;
  49. }
  50. printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
  51. //接收数据
  52. int ret = recv(sClient, revData, 255, 0);
  53. if(ret > 0)
  54. {
  55. revData[ret] = 0x00;
  56. printf(revData);
  57. }
  58. //发送数据
  59. char * sendData = "你好,TCP客户端!\n";
  60. send(sClient, sendData, strlen(sendData), 0);
  61. closesocket(sClient);
  62. }
  63. closesocket(slisten);
  64. WSACleanup();
  65. return 0;
  66. }

client端:

[cpp] view plaincopy
  1. #include "stdafx.h"
  2. #include <WINSOCK2.H>
  3. #include <STDIO.H>
  4. #pragma  comment(lib,"ws2_32.lib")
  5. int main(int argc, char* argv[])
  6. {
  7. WORD sockVersion = MAKEWORD(2,2);
  8. WSADATA data;
  9. if(WSAStartup(sockVersion, &data) != 0)
  10. {
  11. return 0;
  12. }
  13. SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  14. if(sclient == INVALID_SOCKET)
  15. {
  16. printf("invalid socket !");
  17. return 0;
  18. }
  19. sockaddr_in serAddr;
  20. serAddr.sin_family = AF_INET;
  21. serAddr.sin_port = htons(8888);
  22. serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  23. if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
  24. {
  25. printf("connect error !");
  26. closesocket(sclient);
  27. return 0;
  28. }
  29. char * sendData = "你好,TCP服务端,我是客户端!\n";
  30. send(sclient, sendData, strlen(sendData), 0);
  31. char recData[255];
  32. int ret = recv(sclient, recData, 255, 0);
  33. if(ret > 0)
  34. {
  35. recData[ret] = 0x00;
  36. printf(recData);
  37. }
  38. closesocket(sclient);
  39. WSACleanup();
  40. return 0;
  41. }

然后是UDP

server端:
[cpp] view plaincopy
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib, "ws2_32.lib")
  5. int main(int argc, char* argv[])
  6. {
  7. WSADATA wsaData;
  8. WORD sockVersion = MAKEWORD(2,2);
  9. if(WSAStartup(sockVersion, &wsaData) != 0)
  10. {
  11. return 0;
  12. }
  13. SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  14. if(serSocket == INVALID_SOCKET)
  15. {
  16. printf("socket error !");
  17. return 0;
  18. }
  19. sockaddr_in serAddr;
  20. serAddr.sin_family = AF_INET;
  21. serAddr.sin_port = htons(8888);
  22. serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
  23. if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
  24. {
  25. printf("bind error !");
  26. closesocket(serSocket);
  27. return 0;
  28. }
  29. sockaddr_in remoteAddr;
  30. int nAddrLen = sizeof(remoteAddr);
  31. while (true)
  32. {
  33. char recvData[255];
  34. int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);
  35. if (ret > 0)
  36. {
  37. recvData[ret] = 0x00;
  38. printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
  39. printf(recvData);
  40. }
  41. char * sendData = "一个来自服务端的UDP数据包\n";
  42. sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);
  43. }
  44. closesocket(serSocket);
  45. WSACleanup();
  46. return 0;
  47. }

client端:

[cpp] view plaincopy
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib, "ws2_32.lib")
  5. int main(int argc, char* argv[])
  6. {
  7. WORD socketVersion = MAKEWORD(2,2);
  8. WSADATA wsaData;
  9. if(WSAStartup(socketVersion, &wsaData) != 0)
  10. {
  11. return 0;
  12. }
  13. SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  14. sockaddr_in sin;
  15. sin.sin_family = AF_INET;
  16. sin.sin_port = htons(8888);
  17. sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  18. int len = sizeof(sin);
  19. char * sendData = "来自客户端的数据包.\n";
  20. sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);
  21. char recvData[255];
  22. int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);
  23. if(ret > 0)
  24. {
  25. recvData[ret] = 0x00;
  26. printf(recvData);
  27. }
  28. closesocket(sclient);
  29. WSACleanup();
  30. return 0;
  31. }

转载于:https://www.cnblogs.com/lifan3a/articles/7577704.html

Windows下C语言的Socket编程例子(TCP和UDP)相关推荐

  1. python的基础网络编程是下列_Python入门基础之网络编程、socket编程、TCP、UDP编程...

    忙了两天,继续更文!希望多多支持. 套接字 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构.网络化的应用程序在开始任何通讯之前都必需要创建套接字. 套接字有三种: ...

  2. linux raw socket 例子,raw socket编程例子

    raw socket编程例子内容安排: 1.原始套接字介绍 1.1 原始套接字工作原理与规则 1.2 简单应用 2 FTP密码窃取器实现(简单的rootkit) 2.1 设计思路 2.2 实现 2.3 ...

  3. Windows下C语言实现HTTP客户端

    Windows下C语言实现HTTP客户端 1 #include "stdafx.h" //控制台应用自带头文件,能够加快编译的速度 2 #include<winsock2.h ...

  4. 以下是UNIX linux 下c语言的图形编程  curses库

    UNIX下c语言的图形编程--curses.h 函式库 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-22 19:39:36 减小字体 增大字体 相信您在网路上一定用过 ...

  5. Linux下c语言的图形编程(转) curses.h 函式库

    这是转贴哈,最近想吧TC的图形编程搞到LINUX下面来,所以就对其有所研究了哦. http://tech.techweb.com.cn/viewthread.php?tid=181892 注明了转载, ...

  6. Windows下R语言环境安装

    Windows下R语言环境安装 R官网: https://www.r-project.org/ 按照如下步骤下载windows中的安装文件R-4.1.0-win.exe 文件已经下载完成:R-4.1. ...

  7. Windows下Go语言的安装和运行

    参考:https://blog.csdn.net/SquirrelYuyu/article/details/82776029 Windows下Go语言的安装和运行 文章目录 Go语言的安装与配置 Go ...

  8. python网络编程自学_五分钟搞定Python网络编程实现TCP和UDP连接

    Python网络编程实现TCP和UDP连接, 使用socket模块, 所有代码在python3下测试通过. 实现TCP#!/usr/bin/env python3 # -*- coding: utf- ...

  9. Java的网络编程【TCP与UDP聊天小程序】

    Java的网络编程[TCP与UDP聊天小程序] 1. TCP协议 1.1 传输控制协议(Transmission Control Protocol),是一种**面向连接(全程保持连接)**的协议,类似 ...

  10. Windows下C语言实现HTTP client暨初次使用VS2017 win32 编程

    https://blog.csdn.net/xiaoge2030/article/details/77604645 创建空项目 https://blog.csdn.net/hzrandd/articl ...

最新文章

  1. TPU 3.0,Android P...Google带来了哪些惊喜?
  2. CheckCode.js 前端验证码插件
  3. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
  4. [Python]使用 lambda 函数
  5. 物联网面临发展的主要难题是什么,物联网技术主要分为哪几类?
  6. python串口实时读取数据画图_python串口绘图
  7. java课程设计小组分工_java课程设计---团体
  8. 斯坦福大学吴恩达机器学习教程中文笔记——目录
  9. 史上最全最准的支付行业常用名词解释精选
  10. getinfo怎么用php,PHP SplObjectStorage getinfo()用法及代码示例
  11. 怎样设置公众号自动回复
  12. 一小心删除了系统文件NTDETECT.COM怎么办
  13. CTGU实验6_2-创建还书存储过程
  14. 自然常数e的由来以及计算机为什么是二进制
  15. 文件锁(一)——文件锁的概述
  16. MATLAB 用高斯消元法求解线性方程组
  17. 调研容易上岸的在职研究生
  18. 你绝对没用过的三电源切换电路
  19. 【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
  20. 普通话智能测试系统软件,普通话智能学习软件(普通话水平测试仿真系统) iso光盘版...

热门文章

  1. java date只保留年月日_入门之JAVA爬虫
  2. android 两个视频合并,手机如何合并视频片段 安卓手机多个视频合并成一个的方法...
  3. C# socket编程TcpClient与TcpListener UdpClient
  4. Unity 脚本的生命周期
  5. C#学习笔记——类的继承
  6. 我的世界java版盔甲架_我的世界盔甲架指令 手机版盔甲架指令
  7. 教你如何做到显示 Dialog Box(对话框)
  8. Numpy系列(六)常用的数组合并操作
  9. Linux系统是否被植入木马的排查流程梳理
  10. 此刻心情--我为什么不找女朋友