好久没逛CSDN了,最近为了考试,忙的晕头转向的,终于又重见天日啦!嘎嘎,先发下牢骚,进入主题。RT,想做一个简单的C/S模式的聊天工具,类似于QQ似得,不要求功能多么强大,只要实现基本的通信就ok了。各位大侠,给指点思路,客户端、服务器端 要实现那些东东?

解决方案 »

  1.   

    本例实现功能如下:Server端开启服务
    Client端发起链接请求,并向Server端发送数据
    Server端响应请求,并在Server显示,向Client端返回数据
    Client端接收Server的数据并显示本例效果如下:终端1:终端2:Server端:本例源代码如下:Server端:package com.android.Yao;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;public class YaoChatServer extends Thread {private YaoChatServer() throws IOException {
       CreateSocket();
       //创建Socket服务器
    }public void run() { 
       Socket client;
       String txt;
       try { 
        while (true)
        //线程无限循环,实时监听socket端口
        {
         client=ResponseSocket();       
         //响应客户端链接请求。。
        
         while(true)
         {
          txt=ReceiveMsg(client);  
          System.out.println(txt);
          //链接获得客户端发来消息,并将其显示在Server端的屏幕上
       
          SendMsg(client,txt);
          //向客户端返回消息      if(true)break;
          //中断,继续等待链接请求
         }
        
         CloseSocket(client);
         //关闭此次链接
        }   
       } 
       catch (IOException e) {
        System.out.println(e);
       }}private ServerSocket server = null;
    private static final int PORT = 5000;
    private BufferedWriter writer;
    private BufferedReader reader;private void CreateSocket() throws IOException
    {
       server = new ServerSocket(PORT, 100);
       System.out.println("Server starting..");  
    }private Socket ResponseSocket() throws IOException
    {
       Socket client = server.accept(); 
       System.out.println("client connected..");
      
       return client;
    }private void CloseSocket(Socket socket) throws IOException
    {
       reader.close();
       writer.close();
       socket.close();
       System.out.println("client closed..");
    }private void SendMsg(Socket socket,String Msg) throws IOException 
    {
       writer = new BufferedWriter(
          new OutputStreamWriter(socket.getOutputStream()));
        writer.write(Msg+"\n");
        writer.flush();
       
    }private String ReceiveMsg(Socket socket) throws IOException
    {
       reader = new BufferedReader(
         new InputStreamReader(socket.getInputStream()));     
        System.out.println("server get input from client socket..");
        String txt="Sever send:"+reader.readLine();
       
        return txt;
    }public static void main(final String args[]) throws IOException {
       YaoChatServer yaochatserver = new YaoChatServer();
       if (yaochatserver != null) {
        yaochatserver.start();
       }
    }}Client端:package com.android.Yao;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.net.UnknownHostException;import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.*;
    public class YaoChatRoomAndroid extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.chatroom);
                   findviews();
            setonclick();    }    private EditText chattxt;
        private TextView chattxt2;
        private Button chatok;
        
        public void findviews()
        {
            chattxt = (EditText)this.findViewById(R.id.chattxt);
            chattxt2 = (TextView)this.findViewById(R.id.chattxt2);
            chatok   = (Button)this.findViewById(R.id.chatOk);
        }
        
        private void setonclick()
        {
            chatok.setOnClickListener(new View.OnClickListener() {
       
        @Override
        public void onClick(View v) {
         try {
          connecttoserver(chattxt.getText().toString());
         } catch (UnknownHostException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        }
       });
        }
        public void connecttoserver(String socketData) throws UnknownHostException, IOException
    {
        Socket socket=RequestSocket("192.168.0.107",5000);
       SendMsg(socket,socketData);  
       String txt = ReceiveMsg(socket);
       this.chattxt2.setText(txt);    
    }    
        private Socket RequestSocket(String host,int port) throws UnknownHostException, IOException
        {   
        Socket socket = new Socket(host, port);
        return socket;
        }
        
        private void SendMsg(Socket socket,String msg) throws IOException
        {
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
       writer.write(msg.replace("\n", " ")+"\n");
       writer.flush();
        }
        
        private String ReceiveMsg(Socket socket) throws IOException
        {
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        
       String txt=reader.readLine();
       return txt;    }    
    }