用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

请选择技术分类

 *如果你找不到更细的分类,可以选择上级分类
当前位置:云代码 - 技术问答 - Java

readUTF() 不工作了,异常 Unknown Source好心人来帮帮我吧。

 悬赏:10|提问者:好凉快|浏览:8344
举报|2013-01-16
服务器代码:
package com.pb.Server;


import java.net.*;
import java.io.*;


import com.pb.Variable.Variable;
import com.pb.entity.User;
public class Server implements Runnable {


static ServerSocket server=null;
static Socket socket=null;
static User user=null;
static ObjectInputStream ois;
static ObjectOutputStream oos;
public static DataInputStream dis;
public static DataOutputStream dos;
public static void main(String[] args) {
new Thread(new Server()).start();


}
public void run(){
try{
server=new ServerSocket(8739);
System.out.println("服务器已启动");

socket=server.accept();
   System.out.println("客户端已连接:"+socket.getInetAddress());
oos=new ObjectOutputStream(socket.getOutputStream());
            dis=new DataInputStream(socket.getInputStream());
            dos=new DataOutputStream(socket.getOutputStream());
//while(true){

try{
Variable.SYS_REQUEST=dis.readUTF();

}catch(Exception e){
System.out.println("等待用户操作");
}
//1.登录用户请求;
   if(Variable.SYS_REQUEST.equals("LANDING")){
    try{
     
    ois=new ObjectInputStream(socket.getInputStream());
user=(User)ois.readObject();
System.out.println("请求登录的用户为 :"+user);
 
System.out.println("返回信息是 :"+ serverTest.testUser(user));
Variable.SYS_BACKMSG=serverTest.testUser(user);

System.out.println("1.测试是否运行");

   dos.writeUTF("gggggggggg");
   dos.flush();
  
   System.out.println(Variable.SYS_BACKMSG);
System.out.println("2.测试是否运行");

    }catch(Exception e)
    {
    System.out.println("2.这里出错");
    e.printStackTrace();
    }
     
    }
   
   else if(Variable.SYS_REQUEST.equals("")){
   
   }
   else if(Variable.SYS_REQUEST.equals("")){
 
                 }else{
                System.out.println("3333333333.这里出错");
                 }
// }

}catch(Exception e){
e.printStackTrace();
//System.out.println("1.这里出错");
}
finally{

try {
socket.close();
server.close();
} catch (IOException e) {

e.printStackTrace();
}


}
}


}
客户端代码:
package com.pb.Client;
import java.io.*;
import java.net.*;


import com.pb.Variable.*;
import com.pb.entity.User;
public class Client {


public static Socket client=null;
   public static BufferedReader br;
    public static User user;
    public static DataOutputStream dos;
   public static DataInputStream dis=null;
   public static String str2=null;
public static void main(String[] args) throws Exception {
// 实例化socket对象
          client=new Socket("127.0.0.1",8739);
          //实例化dos对象。进行传输服务请求
 dos=new DataOutputStream(client.getOutputStream());
          br=new BufferedReader(
         new InputStreamReader(System.in));
          dis=new DataInputStream(client.getInputStream());
System.out.println("--------欢迎使用在线小说阅读系统--------");
System.out.println("1.登录"+"\r\n"+"2注册新用户"+"\r\n"+"3退出");
System.out.println("-------------------------------------");
System.out.println("请输入对应序号");

 String choice=br.readLine();
 
 if(choice.equals("1")){
 dos.writeUTF("LANDING");
 dos.flush();
 
 //调用landingview()界面
 
 landingview();
 System.out.println("3.测试是否运行");
 }
 else if(choice.equals("2")){
 
 }
 else if(choice.equals("3")){
 
 }



}
public static void landingview() throws Exception{

try{

System.out.println("请输入用户名");
        String username=br.readLine();
            System.out.println("请输入密码");
        String userpassword=br.readLine();

       user=new User(username,userpassword);
       ObjectOutputStream oos=
new ObjectOutputStream(client.getOutputStream());
       dis=new DataInputStream(client.getInputStream());
       
     
       oos.writeObject(user);
        oos.flush();
        System.out.println(user);
         //读取服务器返回消息
         System.out.println("1.测试是否运行");
         
      
     str2=dis.readUTF();//程序运行到这里死了。
       
        System.out.println("2.测试是否运行");
     System.out.println("2.测试是否运行"+ str2);
      
     System.out.println(Variable.SYS_BACKMSG);
         if(Variable.SYS_BACKMSG.equals("SUCCESS")){
 System.out.println("登录成功!");
 System.out.println("下一个视窗");
 
 }
         else{
         System.out.println("登录shibai!");
         }


}catch(Exception e){
e.printStackTrace();
}finally{
 
client.close();
}
}


}



最佳回答
修改了一下,把无关重要的都删除了,可以接收了。
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {
	public static Socket client = null;
	public static String choice;
	public static DataOutputStream dos;
	public static DataInputStream dis = null;
	public static String str2 = null;

	public static void main(String[] args) throws Exception {

		new Thread(new Server()).start(); // 启动服务器

		client = new Socket("127.0.0.1", 8878);
		dis = new DataInputStream(client.getInputStream());
		dos = new DataOutputStream(client.getOutputStream());

		System.out.println("1.登录");
		System.out.println("2.退出");
		System.out.println("请输入对应数字进行操作");

		Scanner sca = new Scanner(System.in);
		choice = sca.next();

		if (choice.equals("1")) {
			dos.writeUTF("LANDING");
			dos.flush();

			str2 = dis.readUTF(); // 这里能读取了

			System.out.println("测试是否运行      读取数据: " + str2);

			System.out.println("客户端退出");

		} else if (choice.equals("2")) {
			System.exit(0);
		}

	}
}

class Server implements Runnable {
	ServerSocket server = null;
	Socket socket = null;
	public DataInputStream dis;
	public DataOutputStream dos;

	public void run() {
		try {
			server = new ServerSocket(8878);
			System.out.println("服务器已启动");
			socket = server.accept();
			System.out.println("客户端已连接:" + socket.getInetAddress());

			dis = new DataInputStream(socket.getInputStream());
			dos = new DataOutputStream(socket.getOutputStream());

			// 1.登录用户请求;
			if (dis.readUTF().equals("LANDING")) {
				try {
					dos.writeUTF("gggggggggg");
					dos.flush();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



参考 :
简单java服务器 - java代码库 - 云代码 http://yuncode.net/code/c_50c7f7b11f3d017
Java Socket编程(服务器与客户端通信) - 郭剑锋 - 云代码空间 http://yuncode.net/article/a_50dba228ae99a68

回答者:小蜜锋

等级:高级设计师

积分:7088

(4) | (2) 回答时间:2013-01-16

所有回答

换成

str2 = dis.readLine();
试试


  • 追问:读出来了,但是是乱码,还有这个readLine()方法已经过时了, 我最想问的就是我明明在服务端写了writeUTF()了,为什么客户端的readUTF()读不到提示:at java.io.DataInputStream.readFully(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at com.pb.Client.Client.landingview(Client.java:71) at com.pb.Client.Client.main(Client.java:36)
  • 回答:刚调试了一下,我也不知道为什么writeUTF()不起作用了,可能是oos.flush();这些之类的影响了吧? 如果强制关闭服务端输出流会抛出 java.io.EOFException。
  • 回答:刚调试了一下,我也不知道为什么writeUTF()不起作用了,可能是oos.flush();这些之类的影响了吧? 如果强制关闭服务端输出流会抛出 java.io.EOFException。
举报|(4)|(2)2013-01-16
修改了一下,把无关重要的都删除了,可以接收了。
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {
	public static Socket client = null;
	public static String choice;
	public static DataOutputStream dos;
	public static DataInputStream dis = null;
	public static String str2 = null;

	public static void main(String[] args) throws Exception {

		new Thread(new Server()).start(); // 启动服务器

		client = new Socket("127.0.0.1", 8878);
		dis = new DataInputStream(client.getInputStream());
		dos = new DataOutputStream(client.getOutputStream());

		System.out.println("1.登录");
		System.out.println("2.退出");
		System.out.println("请输入对应数字进行操作");

		Scanner sca = new Scanner(System.in);
		choice = sca.next();

		if (choice.equals("1")) {
			dos.writeUTF("LANDING");
			dos.flush();

			str2 = dis.readUTF(); // 这里能读取了

			System.out.println("测试是否运行      读取数据: " + str2);

			System.out.println("客户端退出");

		} else if (choice.equals("2")) {
			System.exit(0);
		}

	}
}

class Server implements Runnable {
	ServerSocket server = null;
	Socket socket = null;
	public DataInputStream dis;
	public DataOutputStream dos;

	public void run() {
		try {
			server = new ServerSocket(8878);
			System.out.println("服务器已启动");
			socket = server.accept();
			System.out.println("客户端已连接:" + socket.getInetAddress());

			dis = new DataInputStream(socket.getInputStream());
			dos = new DataOutputStream(socket.getOutputStream());

			// 1.登录用户请求;
			if (dis.readUTF().equals("LANDING")) {
				try {
					dos.writeUTF("gggggggggg");
					dos.flush();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



参考 :
简单java服务器 - java代码库 - 云代码 http://yuncode.net/code/c_50c7f7b11f3d017
Java Socket编程(服务器与客户端通信) - 郭剑锋 - 云代码空间 http://yuncode.net/article/a_50dba228ae99a68
举报|(1)|(1)2014-04-08

换成

str2 = dis.readLine();
试试
举报|(1)|(1)2014-07-05
mark
举报|(1)|(1)2017-04-18
??

继续回答


相关提问