客戶端是不是這么接收服務(wù)器端的消息的
package test;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Scanner;
public class ClinetSocket extends Thread {
?private Socket socket;
?public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException{
??new ClinetSocket().login();
?}
?
?public void login() throws UnknownHostException, IOException, ClassNotFoundException{
??Scanner sc=new Scanner(System.in);
??System.out.print("請輸入您的昵稱:");
??User u= new User(sc.nextLine());
??Socket socket=new Socket("127.0.0.1", 10);
??OutputStream output= socket.getOutputStream();
??ObjectOutputStream objout=new ObjectOutputStream(output);
??objout.writeObject(u);
??this.socket=socket;
??this.start();
??/*while(true){
???InputStream input= socket.getInputStream();
???ObjectInputStream objInput=new ObjectInputStream(input);
???List list= (List)objInput.readObject();
???if(list!==null&&!list.isEmpty()){
????System.out.println("當前在線用戶:");
????for(int i=0;i<list.size();i++){
?????
????}
???}
??}*/
??while(true){
???System.out.print("您說:");
???String mesg= sc.nextLine();
???output.write(mesg.getBytes());
??}
?}
?
?public void run(){
??InputStream input=null;
??try {
???input= this.socket.getInputStream();
???while(true){
????byte[] b=new byte[input.available()];
????input.read(b);
????if(b.length>0){
?????System.out.println("\n"+new String(b));
????}
???}
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
?}
}
class User implements Serializable{
?private String name;
?public User(String name){
??this.name=name;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
這是客戶端代碼,我使用了一個線程去無線等待接受服務(wù)器消息,不知道實際的應(yīng)用中是不是這么使用線程來接受服務(wù)器端發(fā)送的消息
2015-02-10
客戶端使用線程無限等待接受服務(wù)器消息不太適合,一般也不會這么做,客戶端不需要使用線程