标签: networking

绕过NAT并通过C++打开端口以实现低延迟

我的目的是:

  • 不要求用户在他的路由器上打开端口
  • 用我的应用程序通过代码完成所有事

有可能这样做吗?考虑到这个应用程序只适用于安装了相同应用程序的其他机器,我可以从头开始编写某种协议吗?

我的一般想法是尽可能快地建立连接,我还必须交换小数据包,降低延迟对我来说比拥有高吞吐量更重要.

c++ networking udp tcp

0
推荐指数
1
解决办法
904
查看次数

C#中的参数超出范围异常错误

我的方法看起来像那样.(从这里抓起)

private void inetConvert() {
    byte[] buf = new byte[1024];
    string result;
    string xeString = String.Format("http://www.xe.com/ucc/convert.cgi?Amount=1&From={0}&To={1}", srcCurrency, dstCurrency);
    System.Net.WebRequest wreq = System.Net.WebRequest.Create(new Uri(xeString));
    System.Net.WebResponse wresp = wreq.GetResponse();
    Stream respstr = wresp.GetResponseStream();
    int read = respstr.Read(buf, 0, 10240); // Error
    result = Encoding.ASCII.GetString(buf, 0, read); 
    curRateLbl.Text= result;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当app执行此应用程序后挂起大约4-5秒后获取此屏幕

在此输入图像描述

我错过了什么?

c# networking winforms

0
推荐指数
1
解决办法
2113
查看次数

对象输入流类转换异常 - 即使它不应该发生

我有一个奇怪的问题.我试图用聊天选项编写简单的客户端 - 服务器应用程序,但我遇到了一个问题 - 对象输入流读取错误的类.错误是:

Exception in thread "Thread-4" java.lang.ClassCastException: org.oxomoco.packets.PacketAlive cannot be cast to org.oxomoco.packets.PacketMessage
at org.oxomoco.server.SocketConnectionServer.run(SocketConnectionServer.java:52)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

它发生在这里:

 PacketMessage pm = (PacketMessage)ois.readObject();
Run Code Online (Sandbox Code Playgroud)

这是循环中看起来像这样:

            while(true){




            //if(ois.readObject() instanceof PacketMessage){


            //  pm = (PacketMessage)ois.readObject();
            //  se.println(ois.readObject().toString());
            //}



            if((ois.readObject() instanceof PacketMessage)==true){
                System.out.println("It is: " + (ois.readObject() instanceof PacketMessage));

                PacketMessage pm = (PacketMessage)ois.readObject();

                se.acprintln(">>",uname + ": " +pm.getMsg());

            }
            if((ois.readObject() instanceof PacketAlive)==true){
                System.out.println("-it is: " + (ois.readObject() instanceof PacketAlive));
                PacketAlive pa = (PacketAlive)ois.readObject();
            }

    }
Run Code Online (Sandbox Code Playgroud)

不知何故 - 即使我检查实例 - 对象输入流是PacketMessage的实例,它应该是PacketAlive的实例.有没有人知道为什么,当然 - …

java sockets networking

0
推荐指数
1
解决办法
1420
查看次数

无法在virtualbox中连接无线(Windows主机,mac客户端)

我是虚拟盒子的新手..我使用mac os snow lep作为客户操作系统和Windows XP作为我的虚拟机主机,我可以通过以太网连接我的互联网,但我无法通过无线连接.它给出错误,我无法看到mac os snow lep中的无线配置文件,这在Windows XP中是可见的.可以任何人告诉我在虚拟框中完成的设置;)

任何人都可以指导我解决这个问题.

等待你的好评,

此致,Dilip Anand

networking virtualbox

0
推荐指数
1
解决办法
3万
查看次数

我应该用什么C#模板为XNA游戏构建服务器?

我将尝试在我的XNA游戏中构建多人游戏并同时为它构建一个服务器,但我不知道服务器的格式是什么.

在大多数有一些玩家托管的游戏中,服务器是隐形的,它没有自己的窗口,你只需在游戏中创建一个大厅,并在后台为你运行一个服务器线程.

这种描述就像我想的那样,但是开发它的最佳方法是什么?我应该将服务器作为控制台应用程序启动,然后以某种方式找到一种启动控制台的方法,并在玩家创建大厅时使其不可见,或找出将代码移植到xna游戏中的线程的方法吗?我应该使用Windows窗体应用程序模板吗?最好的方法是什么?

c# networking xna

0
推荐指数
1
解决办法
805
查看次数

我怎么能设置iptables只允许某些mac地址连接到服务器连接

我目前正在尝试配置iptables,只允许某些mac地址连接它(这是一台用作路由器的debian机器),以便提供一个小级别的保护,防止人们在我不知情的情况下连接到我的网络(直播)在宿舍里,担心我的室友连接到它的可能性),但我很难让mac地址阻塞工作(当我进行更改时,服务器继续像以前一样运行),没有任何更改为阻止mac地址添加,这是我的常规配置

# Generated by iptables-save v1.4.8 on Wed Sep 12 23:56:43 2012
*nat
:PREROUTING ACCEPT [5151384:752742780]
:POSTROUTING ACCEPT [969:251840]
:OUTPUT ACCEPT [97167:7471385]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Sep 12 23:56:43 2012
# Generated by iptables-save v1.4.8 on Wed Sep 12 23:56:43 2012
*filter
:INPUT DROP [4858214:733505988]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.167.1.0/24 -i eth1 -j ACCEPT …
Run Code Online (Sandbox Code Playgroud)

networking debian firewall iptables

0
推荐指数
1
解决办法
6751
查看次数

服务器和客户端之间的简单连接 客户端发送消息和服务器正确获取它.但是,当服务器尝试回复时,没有任何作用?

如果分开

客户端---发送消息到--->服务器:工作正常!

如果分开

服务器---发送消息到--->客户端:工作正常!

但是当两者在一起时:

客户端---发送消息到--->服务器
服务器---发送消息到--->客户端

什么都行不通!

这是ServerSide:

import java.io.*;
import java.net.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MyServer
{  
    private final static int port = 8000; 
    private static String hostname = "";
    private static String hostIP ="";
    public static void main(String[] args )
    {  
        ServerSocket serverSocket=null;
        try {
            // get host information
            hostname = InetAddress.getLocalHost().getHostName();
            hostIP = InetAddress.getLocalHost().getHostAddress();
            // display server information
            System.out.println("MyServer started on "+hostname+" with IP: "+hostIP + " on the port number: " …
Run Code Online (Sandbox Code Playgroud)

java connection networking multithreading

0
推荐指数
1
解决办法
3182
查看次数

我应该在何时何地使用close()方法来避免ObjectInputStream中的IOException?

我正试图通过tcp从客户端程序中读取一个对象.正如您在此行中所看到的,我创建了objectInput:

ObjectInputStream objectInput = new ObjectInputStream(incoming.getInputStream());
Run Code Online (Sandbox Code Playgroud)

然后从其他程序中读取我的输入.它曾经工作正常,直到我做了一些小的改动来清理程序.个人假设我补充说

objectInput.clsoe();
Run Code Online (Sandbox Code Playgroud)

我的问题是,在读取对象后,我应该关闭objectInputStream还是保持不关闭?我应该在使用它之后立即关闭它还是在if块结束时或在程序结束时关闭它?关闭有什么影响?顺便说一句,我已经阅读了密切的文档.

这是错误:

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at Server.ClientWorker.run(MyCollectionServer.java:116)
    at java.lang.Thread.run(Thread.java:680)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try 
        {
            serverSocket = new ServerSocket(port);  
        } 
        catch (IOException e) 
                {
            e.printStackTrace();
        }
        while(true)
        {   
            ClientWorker w;
            try
            {   
                w = new ClientWorker(serverSocket.accept());
                Thread t = new Thread(w);
                t.start();
            }
            catch(IOException e)
            {
                e.printStackTrace();
                break;
            }   
        }
    }
}

class ClientWorker implements Runnable
{
.....
    private …
Run Code Online (Sandbox Code Playgroud)

java sockets networking tcp objectinputstream

0
推荐指数
1
解决办法
3050
查看次数

C#如何处理TCP数据包/段

关于TCP的几个问题.

我知道如果数据包遇到MTU等较低的网络设备,它将被"拆分"或碎片化.但我遇到的问题是了解如何在应用程序中"重建"我的有效负载.(我现在已经尝试了2-3个小时,但似乎无法做到正确)

首先要做的事情.发送数据包时,以下两个选项的优缺点是什么?

NetworkStream ns = client.GetStream();
ns.Write(BitConverter.GetBytes(100));
ns.Write(BitConverter.GetBytes("Test"));
Run Code Online (Sandbox Code Playgroud)

要么

NetworkStream ns = client.GetStream();
byte[] payload = BitConverter.GetBytes(100).Concat(BitConverter.GetBytes("Test"));
ns.Write(payload); //, 0, payload.Length);
Run Code Online (Sandbox Code Playgroud)

我如何在recv重建有效载荷.部分如果已被拆分?我会喜欢用这种勺子喂食,因为我似乎错过了一些非常重要的,但不是那么明显,在我目前的应用中.

c# networking tcp packet

0
推荐指数
1
解决办法
1440
查看次数

在Java TCP套接字上发送任意长的字符串

我有一个Android应用程序通过TCP套接字与我写的服务器进行通信.我现在使用的读取和写入输出的方法适用于较小的字符串(最大60kB),但是当字符串比这个字符串长得多时,我会抛出异常.以下是我对服务器和客户端的相关部分:

服务器:

            DataInputStream dis = null;
            DataOutputStream dos = null;

            try {
                    dis = new DataInputStream(server.getInputStream());
                    dos = new DataOutputStream(server.getOutputStream());

                    String input = "";
                    input = dis.readUTF();
                    handle_input info = new handle_input(input, id);
                    String xml = info.handle();

                    dos.writeUTF(xml);

                    server.close();

            } 
Run Code Online (Sandbox Code Playgroud)

客户:

        Socket socket = null; 
        DataOutputStream dos = null;
        DataInputStream dis = null;
        Boolean result;

        try {
            socket = new Socket(ip, port);
            dos = new DataOutputStream(socket.getOutputStream());
            dis = new DataInputStream(socket.getInputStream());
            dos.writeUTF(the_text);
            String in = "";
            while (in.equals("")) {
                in += …
Run Code Online (Sandbox Code Playgroud)

java sockets string networking tcp

0
推荐指数
1
解决办法
5176
查看次数