在windows下,如何用纯C语言实现socket网络编程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在windows下,如何用纯C语言实现socket网络编程?相关的知识,希望对你有一定的参考价值。

mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用
1.socket()
2.bind()
3.connect()
4.listen()
5.accept()
6.send() 和recv()
7.sendto() 和recvfrom()
8.close() 和shutdown()
9.getpeername()
10.gethostname()
这些接口是在Winsock2.h中定义的不是在mfc中定义的,你只需要包含Winsock2.h头文件和Ws2_32.lib库就可以了。
参考技术A 我觉得是你的概念不清:

1、什么是纯C?
Windows下的纯C,我还没有见过。很多都和posix的要求不一致。

2、要是说使用C语言接口,就很简单,Windows API基本上都是C语言兼容接口。
直接使用就可以了。

纯C基本上是理论模型,没办法用。VC、GCC等都是C语言的方言。追问

朋友,我说的是ansi c哈。

追答

你可以只是用ansi C,但是ansi C里面就没有网络模型。
ansi C里面的很多东西都无法真正和很多操作系统结合,类似的包括C89、C99、C11。

为什么不可能是标准C。
我们可以说一个C语言编译器可以编译符合XX标准的C语言程序。但是很少说一个纯C编译器。
比如,C程序里面和硬件打交道很多,大多数C编译器都提供了访问寄存器的方法,可是由于C语言能够运行的平台太多,每种平台的汇编语言又千差万别。C语言标准怎么制定?
你所说的Windows平台本身又不是一个严格的C语言平台。你比如,你可以打开一些头文件比如stdio.h,你应该可以看到类似__stdcall或者__cdecl的字样,这些就是Windows方言特有的东西之一,因为Windows的压栈方式和标准C不一样,标准C使用__cdecl(如果是纯C环境,这个关键字多余),而Windows使用__stdcall(Windows API大多数都是),这种方式在X86的CPU上快一些,但是很多其他类型的CPU不能很好支持。
类似的,有很多Windows特有的语法成分,没有这些成分,仅仅是一个printf都可能无法运行。

综上Windows系统本身依赖于非标准的C语言,而不同的支持Windows的编译器还要再引入一些非标准的语法成分。所以在纯Windows系统下(不是Cygwin或者UNIX兼容层下),没有办法使用"纯C"来完成和操作系统的交互。其实如果是真正纯C的系统,那所有的include都可以不要,自己照着C语言手册输入相应的声明就可以了,但这种系统不实用。

我原来学习的时候就总是觉得计算机是一个3型自动机,不是图灵机。因为图灵机具有无限存储空间,而实际的计算机只可能存在有限的存储空间。如果严格的按照计算理论来推论,计算机充其量是一个3型自动机。但是有人说,你可以写一个程序,当硬盘满了提示更换硬盘,需要前面的那一块,就告诉需要那一块硬盘,这样当然存储空间就大了许多。而且硬盘不够还可以生产,这样算起来也可以称作无限,因为具有动态发展的可能。

其实,实际问题和理论模型往往存在着差异,不要拿着一个固定的模型去套用实际的东西,你有很多问题想不到。要考虑实际问题和模型的差异,以及这些差异存在的必要性。

追问

想在windows下用C语言进行网络编程,不懂如何下手呀。

追答

你先说说你打算做什么?网络的范围太大,大概占到一个操作系统的三分之一。
一般性质的使用套接字(socket)就可以,底层的推荐你使用Winpcap,比较简单。
当然,你要是不嫌麻烦,使用WinDDK也可以,看你的水平了。
一个完整的协议栈,一个人大约要写好几百年。

PS. 一般人看看TCP/IP卷一就可以了

本回答被提问者采纳
参考技术B 那你要自己实现TCP/IP协议??追问

不是。只要用C语言都行。

参考技术C 使用 vc 吧。是不是纯很重要吗??????追问

用什么库,C语言支持么?

追答

ysdoc

回答的都是VC的内容

以上是关于在windows下,如何用纯C语言实现socket网络编程?的主要内容,如果未能解决你的问题,请参考以下文章

请问如何用C语言实现汉字,和Unicode编码的转换?

如何用Dos环境下的C语言编写在Windows操作系统环境下使用的图形用户界面?

如何用C语言获取windows注册表信息

纯C语言实现简单继承机制

在Ubuntu系统下如何用Python语言编写网页?

在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?