已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
1年前关闭。
Improve this question
我想知道在网络编程的C语言中打开和写入数据到套接字的最简单和最有效的方法。
已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
1年前关闭。
Improve this question
我想知道在网络编程的C语言中打开和写入数据到套接字的最简单和最有效的方法。
6条答案
按热度按时间gdx19jrr1#
你是对的,在C语言中使用socket语法很难。相比之下,后来的语言如Java和Python让它变得很简单。我发现用C语言进行socket编程的最好教程是Beej's Guide to Network Programming。我建议你从头开始,以获得一个很好的概述,但如果你只是需要让一些代码工作 * 现在 *,你可以跳到标题为客户机-服务器背景的部分。
祝你好运!
9fkzdhlc2#
POSIX 7最小可运行客户端服务器TCP示例
将两台计算机连接到一个局域网中,例如您的家庭WiFi网络。
使用以下命令在一台计算机上运行服务器:
使用
ifconfig
获取服务器计算机的IP,例如192.168.0.10
。在另一台计算机上,运行:
现在在客户机上输入lines,服务器将返回递增1(ROT-1密码)的结果。
服务器.c
客户c
在Ubuntu 15.10上测试。
消息长度
客户端和服务器上的
read
调用都在while循环内运行。就像从文件中阅读一样,操作系统可以任意地分割消息以使事情更快,例如,一个数据包可能比另一个数据包到达得早得多。
因此协议必须指定消息停止的约定。常见的方法包括:
Content-Length
)\n
。后续步骤
此示例的局限性在于:
解决这些问题需要线程处理,还可能需要
poll
之类的其他调用。slhcrj9b3#
你没有提到你使用的是什么平台,但是Stevens的Unix Network Programming的副本会是你书架上的一个很好的补充,大多数操作系统都使用socket、bind、connect等来实现Berkley Sockets。
dsekswqp4#
除非你写了一个网络守护程序,否则大多数用C语言建立的网络都可以在比直接使用套接字更高的层次上通过使用适当的库来完成。
例如,如果你只是想用HTTP来检索一个文件,那么就使用Neon或libcurl,这样会更简单,层次更高,而且你会有免费的SSL,IPv6等等。
cxfofazt5#
从基本套接字阅读并不比读写普通文件困难(只要用recv代替read,用send代替write)。当你需要打开一个套接字时,事情会变得有点复杂。原因是有很多不同的方式使用套接字进行通信(TCP,UDP等)。
s2j5cfk06#
我通常用C编写,但你可以在我写的白色“如何避免十大套接字编程错误”中找到一些用处-忽略使用ACE工具包的建议(因为它需要C),但要注意白皮书中的套接字错误-它们很容易犯,但很难找到,特别是对于初学者。http://www.riverace.com/sockets10.htm