Articles of 套接字

有没有办法在Windows中的basic_iostream获取非lockingstream的插入/提取?

我是一个C ++开发人员,直到最近我还不得不创build一个针对Windows的应用程序时,他主要在Solaris和Linux上进行编程。 我一直在使用基于TCP套接字支持的C ++ I / Ostream的通信devise。 这个devise是基于从stream中连续读取单个线程(大部分时间阻塞在套接字读取中等待数据),而其他线程通过同一个stream发送(通过互斥体同步)。 当移动到Windows时,我select使用boost :: asio :: ip :: tcp :: iostream来实现套接字stream。 我惊讶地发现上面的multithreadingdevise导致了Windows上的死锁。 看起来, operator<<(std::basic_ostream<…>,std::basic_string<…>)声明了一个“Sentry”,它locking整个stream的input和输出操作。 由于我读取的线程总是在stream中等待,所以当创build这个Sentry时,从其他线程发送死锁。 这里是运算符<<和Sentry构造过程中调用堆栈的相关部分: … ntdll.dll!7c901046() CAF.exe!_Mtxlock(_RTL_CRITICAL_SECTION * _Mtx=0x00397ad0) Line 45 C CAF.exe!std::_Mutex::_Lock() Line 24 + 0xb bytes C++ CAF.exe!std::basic_streambuf<char,std::char_traits<char> >::_Lock() Line 174 C++ CAF.exe!std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base(std::basic_ostream<char,std::char_traits<char> > & _Ostr={…}) Line 78 C++ CAF.exe!std::basic_ostream<char,std::char_traits<char> >::sentry::sentry(std::basic_ostream<char,std::char_traits<char> > & _Ostr={…}) […]

如何为UDP数据包发送者启用自定义IP地址?

所以我正在做一个UDP数据包发送者,但我有一个问题。 我已经设置了这样,当用户点击“button2”,他们会自动发送一个数据包到我指定的IP。 我怎样才能使用户可以把自己的IP地址,并成为一个数据包发送到IP? 这是我到目前为止的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net.Sockets; using System.Net; using System.IO; namespace ProjectTakedown { public partial class Form1 : Form { public Form1() //where the IP should be entered { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) […]

在Windows上的python select.select()

我正在使用这里的代码testingUDP冲孔。 它在Linux上工作,但在Windows上报告错误。 以下是发生错误的代码段: while True: rfds, _, _ = select([0, sockfd], [], []) # sockfd is a socket if 0 in rfds: data = sys.stdin.readline() if not data: break sockfd.sendto(data, target) elif sockfd in rfds: data, addr = sockfd.recvfrom(1024) sys.stdout.write(data) 和错误消息: Traceback (most recent call last): File "udp_punch_client.py", line 64, in <module> main() File "udp_punch_client.py", […]

HTTPWebResponse原始响应,使用reflection

HTTPWebResponse暴露Headers的属性,是否有可能得到像使用套接字 ,头和内容组合使用reflection的 原始响应 ,我认为必须有一种方法。 我可以使用套接字,但需要做很多工作,如代理支持,https,进展事件等等…列表很长,我一直强烈build议使用HTTPWebRequest,只有问题是我需要原始标题与响应,我试图下载的网站发送一个很长很奇怪的cookie,这不是由HTTPWebRequest,WebClient处理。 WordPress的博客,不能够使用WebClientlogin任何WordPress博客,但与套接字手动cookie处理它的作品完美,可能是WebClient中的错误。 1)只需要原始的标题,这将做的伎俩。 2)也是文章链接 文章说HTTPWebRequest有一个问题, 只有一个线程正在下载,而其他人一直在等待 ,如果这是真的,然后套接字更好? 文章说: 这段代码运行良好,但是它有一个非常严重的问题,因为WebRequest类函数GetResponse将对所有其他进程的访问locking,所以WebRequest将检索到的响应告诉closures,就像在前面代码的最后一行一样。 所以我注意到,总是只有一个线程正在下载,而其他人正在等待GetResponse。 为了解决这个严重的问题,我使用Socket实现了我的两个类MyWebRequest和MyWebResponse。

Python的UDP套接字半随机无法接收

我有一些问题,我猜这是代码。 该应用程序用于“ping”一些定制的networking设备,以检查它们是否还活着。 它每隔20秒钟用一个特殊的UDP数据包,并期待响应。 如果连续三次ping不成功,应用程序会向员工发送警告信息。 应用程序每天24小时运行,每天随机数次(主要是2-5次),应用程序在10分钟的准确时间内未能收到UDP数据包,之后一切恢复正常。 在这十分钟内,只有一个设备似乎在回应,其他人似乎已经死了。 我已经能够从日志中推断出来了。 我已经使用wireshark来嗅探数据包,并且我已经validation了ping数据包正在进出,所以networking部分似乎正在工作,一直到操作系统。 电脑运行WinXPPro,有些没有任何configuration的防火墙。 我在不同的计算机,不同的Windows安装和不同的networking上有这个问题。 我真的不知道这里可能是什么问题。 我附上完成所有networking的代码的相关部分。 这是从应用程序的其余部分在一个单独的线程中运行。 我提前感谢您提供的任何洞察力。 def monitor(self): checkTimer = time() while self.running: read, write, error = select.select([self.commSocket],[self.commSocket],[],0) if self.commSocket in read: try: data, addr = self.commSocket.recvfrom(1024) self.processInput(data, addr) except: pass if time() – checkTimer > 20: # every 20 seconds checkTimer = time() if self.commSocket in […]

bind()失败,出现Windows套接字错误10049

我尝试使用IPv6和UDP在C中创build客户端/服务器程序。 当程序绑定套接字时,它将返回WSAError 10049.我知道这是地址名称的问题,但是没有看到问题是什么。 我希望有人能帮帮忙。 struct sockaddr_in6 server, client; SOCKET sock; char buffer[BUFFERSIZE]; LPTSTR recvBuff[1024]; DWORD recvBuffLen = 1024UL; int len = sizeof(client); WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(1,1); WSAStartup(wVersionRequested, &wsaData); sock = socket(AF_INET6, SOCK_DGRAM, 0); if (sock < 0) error("Fehler beim Anlegen des Sockets"); server.sin6_family = AF_INET6; server.sin6_port = htons(6000); server.sin6_addr = in6addr_any; if […]

nodejs无法在Windows上parsing“localhost”

下面的代码在windows下的node.js中产生一个exception: var Socket = require("net").Socket; socket = new Socket(); socket.connect(80, "localhost"); 这里是消息: events.js:2083: Uncaught Error: getHostByName ENOTFOUND 当我删除localhost ,它工作正常。 什么可能导致这个? 我尝试closures防火墙,但没有任何效果。

Python,Connectin拒绝10061

我不断收到这个错误 [Errno 10061]由于目标机器主动拒绝连接,因此无法build立连接。 我正在运行Windows 7 64位,没有病毒或保护软件,并允许python通过我的防火墙(我也试过把我的防火墙完全closures,但结果相同)。 当我运行服务器并使用telnet连接就好了。 当我尝试连接到客户端的服务器失败。 任何build议,我可以尝试解决这个问题? 如果你需要更多的信息,只需要问,我会提供。 客户代码 import socket import sys def main(): host = "" port = 8934 message = "Hello World!" host = raw_input("Enter IP: ") #Create Socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print "Failed to create socket. Error code: %s Error Message: %s"%(str(msg[0]),msg[1]) sys.exit() print […]

将Winsock移植到Linux套接字

我有一个使用Winsock进行networking连接的程序,现在我们的要求之一是将程序移植到Linux上。 唯一阻止我们这样做的是Winsock。 我的问题是:我可以轻松地将它转移到Linux实现吗? 是否有任何我应该知道的陷阱,如果我只是简单地包含适当的头文件,我将不得不处理什么样的事情? 谢谢你的帮助! 我会张贴代码,但由于法律原因,我不能遗憾。 但是,我们的代码确实使用了以下内容: WSAStartup(..) WSACleanup(..) Socket(..) sendto(..) recvfrom(..) ioctlsocket(..) setsocketopt(..)

为什么我的客户端套接字不能连接到我的ServerSocket?

在这个非常基本的客户端/服务器套接字程序中,为什么我的客户端套接字从不连接并抛出java.net.ConnectException ? 我在一台计算机上运行MessageServer程序,在同一networking上的另一台笔记本电脑上运行ClientServer程序。 我已经validation,正在运行服务器程序的计算机的本地IP是10.0.0.1在该计算机上的Windows cmd中使用ipconfig命令。 服务器: package server; import java.net.*; import java.io.*; public class MessageServer { public static void main(String args[]) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(4302); } catch (Exception e) { System.out.println("well bad news…"); } boolean noConnection = true; while(noConnection == true) { try { Socket client = serverSocket.accept(); […]