- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 ArrayList 发送到 Android 设备上的客户端。服务器说它发送了该对象,但是在 Android 设备上它挂起。我已经阅读过,在创建 ObjectInputStream
时,必须首先创建 ObjectOuputStream
然后刷新。我已经尝试过,但这对我不起作用。我没有发布获取客户端的代码,因为它只是简单地从文本文件中读取。 Client 类非常基本,只有很少的属性,例如用户名、密码和 friend 字符串数组列表。任何帮助将非常感激。服务器:
public class Server {
private static final int port = 9001;
private static final String IPAddr = "xxxxxxxxxxx";
ServerSocket server = null;
ArrayList <Client> users = new ArrayList<Client>();
public Server(){
try{
server = new ServerSocket(port);
System.out.println("connected server on port" + port);
while(true){
System.out.println("waiting for connection my ip add is "+ InetAddress.getLocalHost().getHostAddress());
Socket clientsocket = server.accept();
System.out.println("Connect to client:"+ clientsocket.getInetAddress().getHostName());
ClientThread client = new ClientThread(clientsocket);
client.start();
}
} catch(IOException e) {
System.err.println("Could not listen on port");
}
}
//Thread
public class ClientThread extends Thread {
private Socket sckt = null;
public ClientThread(Socket sckt){
super("ClientThread");
this.sckt = sckt;
}
public void run(){
try{
PrintWriter out = new PrintWriter(sckt.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(sckt.getInputStream()));
ObjectOutputStream objectOutput = new ObjectOutputStream(sckt.getOutputStream());
objectOutput.flush();
String Username = input.readLine();
String Password = input.readLine();
System.out.println("recieved from client: "+ Username);
int ClientIndex = isClient(Username);
if (ClientIndex != -1){
if(users.get(ClientIndex).password.equals(Password)){
//password correct -> send friends
out.println("correct");
out.flush();
System.out.println(Username + " is correct");
LoadClientFriends(Username, ClientIndex);
objectOutput.writeObject(users.get(ClientIndex).Friends);
System.out.println("Friends sent");
} else {
//password incorrect -> retry
out.println("password");
System.out.println(Username + " has wrong password");
}
} else {
//not a registered client
out.println("wrong");
System.out.println(Username + " is not a client");
}
} catch(Exception e){
System.err.println("Couldnt connect to Client socket");
}
}
}
public static void main(String[] args){
Server svr = new Server();
}
}
客户端/Android:
public class MainActivity extends ActionBarActivity {
//Varibles
EditText username;
EditText password ;
private static final int port = 9001;
private static final String IPAddr = "xxxxxxx";
//Methods
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
/* Drawable d = getResources().getDrawable(R.drawable.actionbar_background);
getActionBar().setBackgroundDrawable(d);*/
}
public void Login(View view) {
//connect to server
Thread myThread2 = new Thread(Connect);
myThread2.start();
}
public void Register(View view) {
Intent i = new Intent(this, register_screen.class);
startActivity(i);
}
Runnable Connect = new Runnable()
{
public void run()
{
try {
Socket connection = new Socket(IPAddr,port);
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
PrintWriter output = new PrintWriter(connection.getOutputStream(), true);
//Sent the username a password for verifaction
username = (EditText)findViewById(R.id.edtName);
password = (EditText)findViewById(R.id.edtPassword);
output.println(username.getText().toString());
output.flush();
output.println(password.getText().toString());
output.flush();
//Receive confirmation of client
String res = input.readLine();
if (res.contains("correct")){
ObjectOutputStream objectOutput = new ObjectOutputStream(connection.getOutputStream());
objectOutput.flush();
ObjectInputStream objectInput = new ObjectInputStream(new BufferedInputStream(connection.getInputStream())); //Error Line!
Object object = objectInput.readObject();
ArrayList<String> friends = (ArrayList<String>) object;
Intent intent = new Intent(MainActivity.this,chat_screen.class);
intent.putExtra("Friends", friends);
startActivity(intent);
}else if (res.contains("password")){
Intent i = new Intent(getBaseContext(), MainActivity.class);
startActivity(i);
}else {
}
}catch (Exception e){
}
}
};
}
最佳答案
您看到的错误是由于多种输出流格式造成的。坚持使用ObjectOutputStream/ObjectInputStream
或PrintWriter/BufferedReader
。我建议ObjectOutputStream/ObjectInputStream
。
服务器代码:使用objectOutPut
进行所有写入。
// out.println("correct");
objectOutput.writeUTF("correct");
// Update code for password and wrong too - Use objectOutput.writeUTF("");
客户端代码:仅使用ObjectInputStream
而不是BufferedReader
在此处定义 objectInput:
// BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
ObjectInputStream objectInput = new ObjectInputStream(connection.getInputStream());
PrintWriter output = new PrintWriter(connection.getOutputStream(), true);
// Read data as follows:
// String res = input.readLine();
String res = objectInput.readUTF();
关于java - ObjectInputStream 拖拽程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451823/
当我尝试模拟 ObjectInputStream 对象时,我得到一个 NullPointerException。更准确地说,当调用此行时: when(inputStream.readObject())
这是我的代码: ObjectInputStream ois = null; UserRegistration UR = new UserRegistration(); Scan
所以我试图将一个对象从客户端发送到服务器,然后我用这个对象做一些事情。我验证了发送时对象包含数据。当我在调试器中读取对象时,它的所有属性均为 null。 下面是我发送对象的位置: private cl
我正在使用套接字对java网络进行编程,并使用简单对象在远程程序之间交换数据。 在本例中,我有一个使用以下方法构造的ObjectInputStream: new ObjectInputStream(S
我一直在尝试制作一款两人多米诺骨牌游戏。目前,我希望在玩家 2 的屏幕上模仿玩家 1 的 Action ,仅此而已。如果我启动玩家 1 的屏幕并移动一些多米诺骨牌,则当我启动玩家 2 的屏幕时会出现更
这个问题已经有答案了: Sending the same but modifed object over ObjectOutputStream (2 个回答) 已关闭 4 年前。 我正在尝试通过套接字
我在一个文件中存储了多个对象。这与 ObjectInputStream 有关。如果我有以下代码: FileInputStream fis = new FileInputStream(filename)
这个问题已经有答案了: Java socket/serialization, object won't update (2 个回答) 已关闭 8 年前。 我有多个客户端和一台服务器。服务器在一个线程中
我有一系列通过网络套接字发送的对象。 用于读取数据的代码已经实现并且可以工作,但我的问题是有时套接字超时会中断对象的读取(ObjectInputStream.readObject()),从而损坏流.
当我尝试从服务器发送一个对象时,我的计算机似乎崩溃了,第 27 行尝试接收该对象,我想我得到了一个无效的类型代码:0一次,但通常只是崩溃,所以我必须重新启动 new Thread(
我试图在第24行的客户端中实例化一个ObjectInputStream,但它不会,我可以实例化一个ObjectOutputStream,但不能实例化Input。 private class C
我正在尝试使用以下代码读取我保存的文件: public void saveOnFile() { try { ObjectOutputStream output = ne
我保存了一个ArrayList作为带有 ObjectOutputStream 的对象。现在,我如何在另一个应用程序项目上使用 ObjectInputStream 读取该对象?我尝试了一下,它抛出了 C
我有两个类。在第一个类中,我从List中写入数据,在第二堂课中,我想读取这些数据并将其放入listview中。它正确保存数据,但是当我尝试获取它时,logcat 给出错误: java.lang.Cla
我正在尝试将 ArrayList 发送到 Android 设备上的客户端。服务器说它发送了该对象,但是在 Android 设备上它挂起。我已经阅读过,在创建 ObjectInputStream 时,必
我正在通过 java 套接字将文件从 Google glass 设备读取到 PC。由于 catch 语句抛出 eof 异常,我的其余代码被忽略。我该如何解决这个问题? 代码:接收图像(并将其放入简单的
几天前,我开始编写一个小型多人游戏,其中我使用 ObjectInputStreams 和 ObjectOutputStreams 与服务器交换数据。但由于某种原因,服务器没有收到任何东西。所以我寻求一
我有一个套接字,它每隔几秒通过 ObjectOutputStream 向客户端发送一个对象列表。在服务器端,每次 writeObject(myList) 之后,我执行 flush 然后 reset。使
这个问题已经有答案了: ObjectInput and Output streams are not being accepted by client/server (2 个回答) 已关闭 5 年前。
我在使用二进制文件加载应用程序时遇到问题。我正在尝试从二进制文件中读取数据并将数据注入(inject)到我的应用程序中的一些 HashMaps/ArrayLists 中。 public void lo
我是一名优秀的程序员,十分优秀!