Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 套接字编程_Sockets_Network Programming - Fatal编程技术网

Sockets 套接字编程

Sockets 套接字编程,sockets,network-programming,Sockets,Network Programming,这更像是一个一般性的快速问题。 但是在C、Python、C、C++等… 所有的基本套接字网络编程基本相同。就像他们都使用Berkley套接字一样,我想这就是他们的名字,或者每种语言都有自己的套接字方式 谢谢套接字依赖于平台,而不是语言。因此,linux只使用BSD套接字,Windows提供了BSD套接字和一种称为WSA的M$类型的套接字,其他的都不知道。这一切都归结于隐藏的东西——更确切地说是在操作系统的内核级别。那里发现的套接字实现将提供第一组API,以使内核/用户空间能够访问它们——通常通过

这更像是一个一般性的快速问题。 但是在C、Python、C、C++等… 所有的基本套接字网络编程基本相同。就像他们都使用Berkley套接字一样,我想这就是他们的名字,或者每种语言都有自己的套接字方式


谢谢

套接字依赖于平台,而不是语言。因此,linux只使用BSD套接字,Windows提供了BSD套接字和一种称为WSA的M$类型的套接字,其他的都不知道。这一切都归结于隐藏的东西——更确切地说是在操作系统的内核级别。那里发现的套接字实现将提供第一组API,以使内核/用户空间能够访问它们——通常通过共享对象/动态链接库,从而在本机上支持c/c++语言。所有其他语言都依赖于特定于语言的绑定,绑定到操作系统为C/C++提供的SO/DLL文件


<> Hth

< P>窝在C++、C+、java、露比中基本相同。它们稍微容易一些,因为内置类用更高级的语言处理锅炉板。如果您可以用C编写套接字代码,那么只要有需要翻译的引用,您就可以在任何地方编写套接字代码


@Kellogs提出了一个很好的观点,Windows有自己的Socket API,在我的Windows体验中,它通常比Posix实现的性能更好。这些API非常相似。我会把OpenGL比作DirectX。如果你真的知道其中一种,那么你可以通过参考来找出另一种。

现在我们不区分语言,即可以从语言和底层操作系统访问的类库。这是我的解释

C、C++、C、java——只是语言没有关于网络编程的具体支持。p> java类库,.NET框架,C++标准库——在这之中我认为C&java提供了一些网络编程的类。C++标准库不提供任何网络编程类,只有文件的IOFSUSTESTS、STDPATION和字符串可用。但是,C++的Boost库为网络编程提供了类。我不知道还有其他图书馆


操作系统-操作系统提供了一个基本的api,主要是C语言,上面的类库使用它。对于windows,它是winsock api WSA;对于unix,它是BSD套接字api。我认为windows在某种程度上也支持BSDAPI,因此学习曲线更少。但正如@EnabrenTane所说的,这不仅仅是这些。

同意上面凯洛格的观点。Windows&大多数主要兼容POSIX的操作系统都支持基本的BSD套接字API。除了Berkeley socket之外,每个平台还提供额外的专有API以增强性能和可伸缩性。这些扩展API并不仅仅局限于套接字—它们可以处理任何I/O操作,如磁盘文件、命名管道等。。例如,除了传统的select&poll之外,Linux还有自己的epoll机制,BSD有kqueue,Windows有WSAevent*、WSAaAsync*和I/O完成端口API。 这些差异主要在C、C++或Pascal等低级语言中可见。
C、 与C语言相比,Java、Python、Ruby等语言具有更高的层次,它们提供了强大的技术,将您与低级API隔离开来。您可以使用每个平台提供的大量运行时类库,而不是直接处理基本套接字API。例如,要用Python编写TCP/IP服务器,只需使用类即可。类似地,在C中,您可以使用来下载网络文件。在C++中,你有Boost库。当然,没有什么能阻止你在应用程序中使用原始API。

我从来没有听说过WPA,你是说WSA吗?IIRC这些并不是真正不同的套接字-您可以连接到一个套接字,如果它是WSA或BSD套接字,则不会看到任何差异。WSA API只是方便的助手,例如在发生套接字事件时获取windows消息。oops。WSA,是的。Windows消息和其他一些差异-从中检查dwFlags参数。那么你就不会得到Ok的标志了……大家都在谈论的原始套接字API,不是伯克利的吗?顺便说一句,我主要关心Unix…他们的原始套接字API叫什么。无论哪种方式,我都假设它们的语法非常相似,并且没有太大的变化?虽然BSD似乎已被POSIX for unix取代,但现在正确吗?嗯。。关于POSIX我只知道libpthread。。。在看了之后,我觉得网络套接字和它没有任何关系。另一件事,让我们参考本机套接字API作为本机套接字API,而不是原始套接字API,其中原始套接字具有不同的含义-它们与IP套接字相关,没有任何来自顶层4级OSI堆栈的内容。据我所知,Unix和世界上其他地方一样都在BSD套接字上。哦,好的,我明白了,也许我看错了,谢谢。