我设法制作了一个可重现的示例(保留了我的大型原始源代码中的所有内容)。问题是只a发送了第一封信。然后,我明白了send() failed: Connection refused。我不知道该怎么做,这实际上是应该起作用的最小代码。
我应该说,只有当我在程序开始时打开套接字一次并在程序结束时关闭它时,代码才不起作用。如果我为每个单独的 send() 打开一个套接字,然后立即关闭它,则不会出现错误。
#include <pcap.h>
#include <cstdio>
#include <getopt.h>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <map>
#include <vector>
#define BUFSIZE 256
#define __FAVOR_BSD
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include<netdb.h>
#include<err.h>
#include <arpa/inet.h>
#include <netinet/ether.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp6.h>
using namespace std;
#define BUFFER 1024                // buffer length
int sock;                        // socket descriptor
void start_connection(){
    struct sockaddr_in server, from; …Run Code Online (Sandbox Code Playgroud) 我正在尝试“测试”UDP 套接字是否打开作为终止程序的一种方式:
 int flags = fcntl(s, F_GETFL, 0);
        fcntl(s, F_SETFL, flags | O_NONBLOCK);
        int x = recv(s, buffer, sizeof(buffer), 0);
        if (x == -1)
        {
            char temp[] = "Testing Connection";
            int x = sendto(s, temp, sizeof(temp), 0, (struct sockaddr *)&si_other, sizeof(si_other));
            printf("%d\n",x);
            if(x == -1){
                return;
            }
            continue;
        }
Run Code Online (Sandbox Code Playgroud)
但是 if 语句没有被触发。它正在发送数据的 UDP 套接字运行以下行(我知道它运行是因为 print 语句打印
    printf("Closing the socket\n");
    close(s);
    return;
Run Code Online (Sandbox Code Playgroud)
即使它尝试发送到的 udp 套接字已关闭,sendto 也会持续返回正值。有没有什么办法解决这一问题?
我创建了一个小型的客户端-服务器程序,其工作原理如下:客户端在五秒内向服务器发送一个随机数,然后服务器发送一个(或多或少出名的)报价给客户端。该随机数表示某些引号所在的 ServerClass 中 ArrayList 的索引。连接运行良好,客户收到报价,我可以轻松地使用 sysout 将其打印出来。我现在的问题是,我想在一个小的 JavaFX / FXML 文件中将收到的报价显示为标签,并且当从服务器传入新报价时,文本应该每五秒更改一次。QuotesClient 类(即客户端)也是相应 FXML 文件的控制器,但问题是因为我的 Client 类中负责处理传入 UDP 数据包的方法是静态的,当然我无法访问非静态在此方法中进行标记。
我也尝试将标签设为静态,但随后我收到一个 NullPointerException:
java.lang.NullPointerException
    at Aufgabe1.QuotesClient.main(QuotesClient.java:48)
    at Aufgabe1.QuotesApp.lambda$1(QuotesApp.java:32)
    at java.base/java.lang.Thread.run(Thread.java:844)
Run Code Online (Sandbox Code Playgroud)
这是我的客户端文件:
public class QuotesClient {
    private static final int BUFSIZE = 508;
    
    @FXML
    private static Label zitatLabel; //Thats the quoteLabel i wanna change
    public static void main(String[] args) throws UnknownHostException {
        var host = "localhost";
        var localPort = 40000;
        var serverPort = 50000; 
        try (var socket = new DatagramSocket(localPort)) {
            while(true) {
                Random …Run Code Online (Sandbox Code Playgroud) 我正在使用UDP播放'recvfrom'和'sendto'电话.我有一个客户端只在端口6000上广播UDP数据包.我有一个服务器绑定端口6000上的套接字,并执行单个recvfrom.
问题是从recvfrom返回的struct sockaddr的sin_port成员总是不正确的.为什么?
我会发布一些源代码,但有人已经发布了这个问题(没有答案),而且我使用的代码与他几乎相同.此外,您可以阅读他的帖子获取有关此问题的更多信息:FORUM POST.
提前致谢
编辑:我真的认为'原因'来自'nos'的答案可能是问题.我怎么检查呢?
我的接收器在 Moto G 中没有收到任何 UDP 数据包,但它适用于其他设备。
通过 WiFi 网络,我已经成功地从其他设备发送了 UDP 数据包。但是在 Moto E 和 Moto G 中它不起作用。
谁能帮助弄清楚为什么它不适用于 Moto G/E?
我的问题是我没有通过 WiFi 网络接收任何 UDP 数据包。
首先,我知道 UDP 不是一个可靠的协议,但我需要在 UDP 中做到这一点,而且我知道最终可能会发生的后果。
让我们假设我有一个长byte数组,我将它分成 32 字节的块分成List<byte[]>. 这意味着发送的每个数据包的长度为 32 字节。
这些数据包将foreach循环发送,我不在乎它们是否到达目的地。这意味着我不期待主持人的确认(至少现在是这样)。
我的问题是,我将如何计算服务器在接收数据包时的当前传输速率(最好以 kbps 为单位)?
我对如何实现这样的计算感到有些困惑......
在C中,我有一个简单的服务器/客户端UDP套接字编程示例.客户端以高速率向服务器发送数据包,而服务器读取每个传入的消息并将其发送回客户端.客户端永远不会读取任何传入的消息.
有没有理由相信发送回客户端的数据包会填满客户端的缓冲区?如果客户没有阅读任何内容,他们究竟会发生什么?它们会立即被丢弃吗?
我在winsock2中做了一个简单的服务器客户端控制台聊天框.然后我的同事问我是否可以进行单服务器多客户端连接,其中SERVER将在TCP中,而CLIENTS将在UDP中.此外,客户端不知道服务器的IP但知道端口号,即客户端必须搜索服务器然后连接它.所有这些都通过LAN.
任何人都可以告诉我如何做这样的程序,或者如果可能的话可以发布代码供参考.
我的教授.给了我这个TCP/UDP的例子,他说这对他有用.但是当我去编译时,我得到一个弃用的API错误,说readLine不再使用了...
我该如何处理?
码:
import java.io.*;
import java.net.*;
public class Server{
    static  Socket clientSocket = null;
    static  ServerSocket serverSocket = null;
    // This chat server can accept up to 10 clients' connections
    static  clientThread t[] = new clientThread[10];
    public static void main(String args[]) {
    // The default port
    int port_number=2222;
    if (args.length < 1)
        {
        System.out.println("Usage: java MultiThreadChatServer \n"+
                   "Now using port number="+port_number);
        } else {
        port_number=Integer.valueOf(args[0]).intValue();
        }
        try {
        serverSocket = new ServerSocket(port_number);
        }
        catch (IOException e)
        {System.out.println(e);}
    while(true){
        try …Run Code Online (Sandbox Code Playgroud) 我期待着C++,UDP,跨平台库.
有没有简单的使用和快速(免费为商业purpouse)库?
我想要一个小而独立的图书馆,而不是一个最大或最抽象的解决方案的一部分,提升我不感兴趣(并解释为什么不是一个真正的问题,可能是论坛讨论,但我们现在是偏离主题).如果库是用C++而不是C风格编写的,那也不错.
我是erlang的新手,有人可以给我一些用于Erlang的TCP/UDP服务器的公会吗?我有一个带有c的TCP/UDP客户端.
我正在摆弄我的树莓派,并且我有一个正在运行的音乐盒(带有 mopidy)。除此之外,我还想实现一些其他奇特的东西。我想从我的智能手机(带有 Tasker)向我的 PI 发送一条(UDP?)消息。但我总是收到“连接被拒绝”消息。我尝试在 iptables 中打开任何 UDP/TCP 端口。接收我尝试过的消息 
netcat -ul 222
为了编辑 iptables,我使用:
sudo nano /etc/network/iptables
sudo iptables-restore /etc/network/iptables
sudo iptables-save
查看打开了哪些端口,我使用:
netstat -tuplen
但我不知道在这个输出上我需要什么来实现我的东西。我的方法是正确的还是完全错误的:-)?最后,我想收到任何消息,将其转换为任何其他操作(例如reboot),提前致谢!