【问题标题】:WinSock Client CWinSock 客户端 C
【发布时间】:2009-11-11 17:47:35
【问题描述】:

我有一个客户端使用 select() 来检查是否有任何东西要接收,否则它会超时并且用户能够发送()。哪个效果很好。但是,程序锁定等待用户输入,所以它不能再 recv() 直到用户发送了一些东西。 我在使用线程方面也不太走运,因为我似乎找不到好的资源,这告诉我如何使用它们。

我尝试为 send 和 recv 函数创建两个线程(使用 CreateThread),这两个函数基本上是使用 while 循环来保持发送和接收的两个函数。然后两个 CreateThreads() 被包裹在一个 while 循环中,否则它似乎就退出了。

我以前基本上没有线程方面的经验,所以我对我一直在做的事情的描述可能听起来很荒谬。但我会很感激任何帮助,在这种用途中正确使用它们,或者替代方法也很好。

【问题讨论】:

  • 你能发布一些重现问题的最小代码吗?如果您仅调用 recv() 以获取可读套接字集中的套接字返回,则应阻止该调用。每次从选择返回时,您是否多次调用 recv()?您是否检查 select() 返回后指示了哪些套接字?

标签: c client winsock


【解决方案1】:

找不到关于套接字编程的好资源?呸。读圣经:

【讨论】:

  • 嘿,如果他不信教怎么办:P?另外,既然他说的是“winsock”,我猜 Unix 网络编程圣经不是他要找的。​​span>
  • 这正是他要找的。 Winsock 只是 BSD 套接字的一个实现——正是那本书所涵盖的内容。 socket、connect、listen、send、recv - 这些都是 BSD 套接字,在 Winsock 中。
  • 虽然 UNP 对 Winsock 程序员来说确实很棒且有用,但它可能涵盖了 Winsock 的 1/4。 Winsock 对 BSD 套接字进行了相当多的扩展,使其在 Windows 上更有用,与 Unix 编程相比,它具有根本的哲学差异。在 Windows 上编写纯 BSD 套接字代码并不总是正确的方法。所以,Rick 应该得到一本 Winsock 的书,可能除了 UNP 之外。看起来它们现在大部分都绝版了,但奎因和舒特的重印版将于 1 月到期。同时,检查图书馆和旧书市场。
  • @Warren,好点。我只是更喜欢便携式软件而不是特定于平台的东西。
【解决方案2】:

这有很强的作业感……

我不太喜欢 Windows 编程,但是当我之前做过一些编程时,曾经有一个 kbhit(可能)函数允许您检查用户是否发送了任何输入。您可以寻找类似的东西并在再次开始选择之前尝试非阻塞用户输入检查。

然后您可以在没有多线程的情况下使其工作
(除非,呃,您必须使用它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多