Windows下C语言的Socket编程例子(TCP和UDP)
首先是TCP
- #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 slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(slisten == 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(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
- {
- printf("bind error !");
- }
- //开始监听
- if(listen(slisten, 5) == SOCKET_ERROR)
- {
- printf("listen error !");
- return 0;
- }
- //循环接收数据
- SOCKET sClient;
- sockaddr_in remoteAddr;
- int nAddrlen = sizeof(remoteAddr);
- char revData[255];
- while (true)
- {
- printf("等待连接...\n");
- sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
- if(sClient == INVALID_SOCKET)
- {
- printf("accept error !");
- continue;
- }
- printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
- //接收数据
- int ret = recv(sClient, revData, 255, 0);
- if(ret > 0)
- {
- revData[ret] = 0x00;
- printf(revData);
- }
- //发送数据
- char * sendData = "你好,TCP客户端!\n";
- send(sClient, sendData, strlen(sendData), 0);
- closesocket(sClient);
- }
- closesocket(slisten);
- WSACleanup();
- return 0;
- }
client端:
- #include "stdafx.h"
- #include <WINSOCK2.H>
- #include <STDIO.H>
- #pragma comment(lib,"ws2_32.lib")
- int main(int argc, char* argv[])
- {
- WORD sockVersion = MAKEWORD(2,2);
- WSADATA data;
- if(WSAStartup(sockVersion, &data) != 0)
- {
- return 0;
- }
- SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(sclient == INVALID_SOCKET)
- {
- printf("invalid socket !");
- return 0;
- }
- sockaddr_in serAddr;
- serAddr.sin_family = AF_INET;
- serAddr.sin_port = htons(8888);
- serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
- if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
- {
- printf("connect error !");
- closesocket(sclient);
- return 0;
- }
- char * sendData = "你好,TCP服务端,我是客户端!\n";
- send(sclient, sendData, strlen(sendData), 0);
- char recData[255];
- int ret = recv(sclient, recData, 255, 0);
- if(ret > 0)
- {
- recData[ret] = 0x00;
- printf(recData);
- }
- closesocket(sclient);
- WSACleanup();
- return 0;
- }
然后是UDP
- #include "stdafx.h"
- #include <stdio.h>
- #include <winsock2.h>
- #pragma comment(lib, "ws2_32.lib")
- int main(int argc, char* argv[])
- {
- WSADATA wsaData;
- WORD sockVersion = MAKEWORD(2,2);
- if(WSAStartup(sockVersion, &wsaData) != 0)
- {
- return 0;
- }
- SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if(serSocket == INVALID_SOCKET)
- {
- printf("socket error !");
- return 0;
- }
- sockaddr_in serAddr;
- serAddr.sin_family = AF_INET;
- serAddr.sin_port = htons(8888);
- serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
- if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
- {
- printf("bind error !");
- closesocket(serSocket);
- return 0;
- }
- sockaddr_in remoteAddr;
- int nAddrLen = sizeof(remoteAddr);
- while (true)
- {
- char recvData[255];
- int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);
- if (ret > 0)
- {
- recvData[ret] = 0x00;
- printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
- printf(recvData);
- }
- char * sendData = "一个来自服务端的UDP数据包\n";
- sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);
- }
- closesocket(serSocket);
- WSACleanup();
- return 0;
- }
client端:
- #include "stdafx.h"
- #include <stdio.h>
- #include <winsock2.h>
- #pragma comment(lib, "ws2_32.lib")
- int main(int argc, char* argv[])
- {
- WORD socketVersion = MAKEWORD(2,2);
- WSADATA wsaData;
- if(WSAStartup(socketVersion, &wsaData) != 0)
- {
- return 0;
- }
- SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- sockaddr_in sin;
- sin.sin_family = AF_INET;
- sin.sin_port = htons(8888);
- sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
- int len = sizeof(sin);
- char * sendData = "来自客户端的数据包.\n";
- sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);
- char recvData[255];
- int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);
- if(ret > 0)
- {
- recvData[ret] = 0x00;
- printf(recvData);
- }
- closesocket(sclient);
- WSACleanup();
- return 0;
- }
转载于:https://www.cnblogs.com/lifan3a/articles/7577704.html
Windows下C语言的Socket编程例子(TCP和UDP)相关推荐
- python的基础网络编程是下列_Python入门基础之网络编程、socket编程、TCP、UDP编程...
忙了两天,继续更文!希望多多支持. 套接字 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构.网络化的应用程序在开始任何通讯之前都必需要创建套接字. 套接字有三种: ...
- linux raw socket 例子,raw socket编程例子
raw socket编程例子内容安排: 1.原始套接字介绍 1.1 原始套接字工作原理与规则 1.2 简单应用 2 FTP密码窃取器实现(简单的rootkit) 2.1 设计思路 2.2 实现 2.3 ...
- Windows下C语言实现HTTP客户端
Windows下C语言实现HTTP客户端 1 #include "stdafx.h" //控制台应用自带头文件,能够加快编译的速度 2 #include<winsock2.h ...
- 以下是UNIX linux 下c语言的图形编程 curses库
UNIX下c语言的图形编程--curses.h 函式库 作者:不详 来源:supcode.com收集整理 发布时间:2005-7-22 19:39:36 减小字体 增大字体 相信您在网路上一定用过 ...
- Linux下c语言的图形编程(转) curses.h 函式库
这是转贴哈,最近想吧TC的图形编程搞到LINUX下面来,所以就对其有所研究了哦. http://tech.techweb.com.cn/viewthread.php?tid=181892 注明了转载, ...
- Windows下R语言环境安装
Windows下R语言环境安装 R官网: https://www.r-project.org/ 按照如下步骤下载windows中的安装文件R-4.1.0-win.exe 文件已经下载完成:R-4.1. ...
- Windows下Go语言的安装和运行
参考:https://blog.csdn.net/SquirrelYuyu/article/details/82776029 Windows下Go语言的安装和运行 文章目录 Go语言的安装与配置 Go ...
- python网络编程自学_五分钟搞定Python网络编程实现TCP和UDP连接
Python网络编程实现TCP和UDP连接, 使用socket模块, 所有代码在python3下测试通过. 实现TCP#!/usr/bin/env python3 # -*- coding: utf- ...
- Java的网络编程【TCP与UDP聊天小程序】
Java的网络编程[TCP与UDP聊天小程序] 1. TCP协议 1.1 传输控制协议(Transmission Control Protocol),是一种**面向连接(全程保持连接)**的协议,类似 ...
- Windows下C语言实现HTTP client暨初次使用VS2017 win32 编程
https://blog.csdn.net/xiaoge2030/article/details/77604645 创建空项目 https://blog.csdn.net/hzrandd/articl ...
最新文章
- TPU 3.0,Android P...Google带来了哪些惊喜?
- CheckCode.js 前端验证码插件
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
- [Python]使用 lambda 函数
- 物联网面临发展的主要难题是什么,物联网技术主要分为哪几类?
- python串口实时读取数据画图_python串口绘图
- java课程设计小组分工_java课程设计---团体
- 斯坦福大学吴恩达机器学习教程中文笔记——目录
- 史上最全最准的支付行业常用名词解释精选
- getinfo怎么用php,PHP SplObjectStorage getinfo()用法及代码示例
- 怎样设置公众号自动回复
- 一小心删除了系统文件NTDETECT.COM怎么办
- CTGU实验6_2-创建还书存储过程
- 自然常数e的由来以及计算机为什么是二进制
- 文件锁(一)——文件锁的概述
- MATLAB 用高斯消元法求解线性方程组
- 调研容易上岸的在职研究生
- 你绝对没用过的三电源切换电路
- 【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
- 普通话智能测试系统软件,普通话智能学习软件(普通话水平测试仿真系统) iso光盘版...
热门文章
- java date只保留年月日_入门之JAVA爬虫
- android 两个视频合并,手机如何合并视频片段 安卓手机多个视频合并成一个的方法...
- C# socket编程TcpClient与TcpListener UdpClient
- Unity 脚本的生命周期
- C#学习笔记——类的继承
- 我的世界java版盔甲架_我的世界盔甲架指令 手机版盔甲架指令
- 教你如何做到显示 Dialog Box(对话框)
- Numpy系列(六)常用的数组合并操作
- Linux系统是否被植入木马的排查流程梳理
- 此刻心情--我为什么不找女朋友