我的目的是:
有可能这样做吗?考虑到这个应用程序只适用于安装了相同应用程序的其他机器,我可以从头开始编写某种协议吗?
我的一般想法是尽可能快地建立连接,我还必须交换小数据包,降低延迟对我来说比拥有高吞吐量更重要.
我的方法看起来像那样.(从这里抓起)
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秒后获取此屏幕

我错过了什么?
我有一个奇怪的问题.我试图用聊天选项编写简单的客户端 - 服务器应用程序,但我遇到了一个问题 - 对象输入流读取错误的类.错误是:
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的实例.有没有人知道为什么,当然 - …
我是虚拟盒子的新手..我使用mac os snow lep作为客户操作系统和Windows XP作为我的虚拟机主机,我可以通过以太网连接我的互联网,但我无法通过无线连接.它给出错误,我无法看到mac os snow lep中的无线配置文件,这在Windows XP中是可见的.可以任何人告诉我在虚拟框中完成的设置;)
任何人都可以指导我解决这个问题.
等待你的好评,
此致,Dilip Anand
我将尝试在我的XNA游戏中构建多人游戏并同时为它构建一个服务器,但我不知道服务器的格式是什么.
在大多数有一些玩家托管的游戏中,服务器是隐形的,它没有自己的窗口,你只需在游戏中创建一个大厅,并在后台为你运行一个服务器线程.
这种描述就像我想的那样,但是开发它的最佳方法是什么?我应该将服务器作为控制台应用程序启动,然后以某种方式找到一种启动控制台的方法,并在玩家创建大厅时使其不可见,或找出将代码移植到xna游戏中的线程的方法吗?我应该使用Windows窗体应用程序模板吗?最好的方法是什么?
我目前正在尝试配置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) 如果分开
客户端---发送消息到--->服务器:工作正常!
如果分开
服务器---发送消息到--->客户端:工作正常!
但是当两者在一起时:
客户端---发送消息到--->服务器
服务器---发送消息到--->客户端
什么都行不通!
这是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) 我正试图通过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) 关于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重建有效载荷.部分如果已被拆分?我会喜欢用这种勺子喂食,因为我似乎错过了一些非常重要的,但不是那么明显,在我目前的应用中.
我有一个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)