Tag: tcp

Go TCP读取是非阻塞的

我想在Go中创建一个服务器和客户端,我已经设法与服务器和客户端进行通信。 但我遇到的问题是golang中的TCP读取是非阻塞的。 我想知道的是,golang中的读取是否可能像C中的读取一样阻塞。谢谢 编辑: 这是服务器的源代码: func Init_tcp() *net.TCPListener { laddr, err := net.ResolveTCPAddr(“tcp”, “:4243”) if err != nil { log.Fatal(err) } tcp, err := net.ListenTCP(“tcp”, laddr) if err != nil { log.Fatal(err) } return tcp } func main() { tcp := Init_tcp() conn, _ := tcp.Accept() data := make([]byte, 512) conn.SetNoDelay(false) for { conn.Read(data) fmt.Println(data) […]

创建ip网络数据包

我必须手动创建自己的网络数据包使用任何Protocol.i应该发送到客户端并解析或分析数据包。可以帮助我在哪里和hpw启动??? 我对sockets编程有所了解..

分别通过TCP套接字发送和接收字符串

我有一个TCP服务器和客户端,具有已建立的套接字。 假设我有以下情况: 服务器: char *fn = “John”; char *ln = “Doe”; char buffer[512]; strcpy(buffer, fn); send(*socket, buffer, strlen(buffer), 0); strcpy(buffer, ln); send(*socket, buffer, strlen(buffer), 0); 客户: char *fn; char *ln; char buffer[512]; bytes = recv(*socket, buffer, sizeof(buffer), 0); buffer[bytes] = ‘\0’; strcpy(fn, buffer); bytes = recv(*socket, buffer, sizeof(buffer), 0); buffer[bytes] = ‘\0’; strcpy(ln, buffer); printf(“%s”, […]

TCP / UDP和以太网MTU碎片

我在线阅读了各种网站和教程,但我仍感到困惑。 如果消息大于IP MTU,则send()返回发送的字节。 消息的其余部分会发生什么? 我是否再次调用send()并尝试发送其余消息? 或者是IP层应该自动处理的东西?

知道C中的任何跨平台套接字库(windows和Linux)吗?

我期待在linux和windows中进行套接字通信(监听,接受,连接,接收,发送,断开)。 我的项目是在C中,所以除非有人能想到让我将C ++库集成到C项目中的方法,否则库也必须在C中。 最终,我希望该库具有ipv6支持和非阻塞模式,但是,这些东西并不是必需的。 有谁知道任何库/跨平台示例代码? 即使只是大型代码片段也会有所帮助。 到目前为止,我发现的少数套接字库都是用C ++编写的。

为什么在工作交错时TCP写入延迟会更糟?

我一直在分析TCP延迟(特别是从用户空间到小消息的内核空间的write ),以便对write的延迟有所了解(确认这可能是特定于上下文的)。 我注意到测试之间存在很大的不一致,这对我来说似乎很相似,而且我很想知道差异来自何处。 我知道微基准测试可能会有问题,但我仍然觉得我缺少一些基本的理解(因为延迟差异是~10倍)。 设置是我有一个C ++ TCP服务器接受一个客户端连接(来自同一CPU上的另一个进程),并且在与客户端连接时进行20次系统调用以write套接字,一次发送一个字节。 服务器的完整代码将在本文末尾复制。 这是使用boost/timer每次write时间输出(增加~1 mic的噪声): $ clang++ -std=c++11 -stdlib=libc++ tcpServerStove.cpp -O3; ./a.out 18 mics 3 mics 3 mics 4 mics 3 mics 3 mics 4 mics 3 mics 5 mics 3 mics … 我可靠地发现第一次write明显慢于其他write 。 如果我在一个计时器中包装10,000个write调用,则每次write的平均值为2微秒,但第一个调用始终是15个以上的麦克风。 为什么会出现这种“升温”现象? 相关地,我运行了一个实验,在每个write调用之间我做了一些阻止CPU工作(计算一个大的素数)。 这会导致所有 write调用都很慢: $ clang++ -std=c++11 -stdlib=libc++ tcpServerStove.cpp -O3; ./a.out 20 mics 23 […]

设置connect()函数的超时时间c中的tcp套接字编程中断recv()

在我的程序中如果无法访问服务器,则连接function会花费太多时间。 所以我尝试使用select()给出时间来连接。 现在的问题是,当我尝试使用recvfrom()从服务器接收数据时,我收到错误“EAGAIN”。 这是用于连接和接收来自服务器的数据的代码。 int sock; struct sockaddr_in addr; int connectWithServer { int status; struct timeval timeout; timeout.tv_sec = 10; timeout.tv_usec = 0; addr.sin_port = htons(port); sock = socket (AF_INET,SOCK_STREAM,0); inet_pton(AF_INET,serverIP,&addr.sin_addr); fd_set set; FD_ZERO(&set); FD_SET(sock, &set); fcntl(sock, F_SETFL, O_NONBLOCK); if ( (status = connect(sock, (struct sockaddr*)&addr, sizeof(addr))) == -1) { if ( errno != EINPROGRESS […]

何时使用poll C函数的POLLOUT事件?

我用socket() + POLLIN poll() + recv() + send()编写了一个小型TCP服务器,但我不知道何时使用POLLOUT轮询或选择writefds来轮询可写事件。 谁能给我一个POLLOUT真正用法的例子 ?

从TCP套接字接收数据包数据包?

我有一个tcp套接字,我接收video流。 我希望从socket接收数据包,以便我可以删除数据包标头并保留唯一的流数据。 我怎样才能做到这一点?? 任何帮助将不胜感激。

如何检查TCP结构中的标志是否已设置?

我正在使用pcap C库来读取数据包。 目前,我使用以下内容来检查并查看struct tcphdr的标志(此结构是否在netinet/tcp.h库中定义)是否已设置: struct tcphdr *tcp = …. if(tcp->th_flags & TH_SYN) { //SYN FLAG IS SET? } 这总是可以用于检查结构中是否设置了特定的标志? 或者,还有更好的方法? 非常感谢任何建议/提示:)