socket实现

来源:互联网 发布:下列网络系统安全原则 编辑:程序博客网 时间:2024/06/06 00:30

客户端:

 

public class TestScoketActivity extends Activity {
 /** Called when the activity is first created. */
 private Button btn;
 private EditText text;
 private MyHandler handler;
 private TextView content;

 private Socket socket = null;
 private DataInputStream input = null;
 private DataOutputStream out = null;
 
 

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  btn = (Button) findViewById(R.id.button1);
  text = (EditText) findViewById(R.id.editText1);
  content = (TextView) findViewById(R.id.text);
  btn.setOnClickListener(new BtnListener());
  handler=new MyHandler();
 }

 class BtnListener implements OnClickListener {

  @Override
  public void onClick(View v) {

   new MyUserThread().start();

  }
 }

 class MyUserThread extends Thread {
  public void run() {
   try {
    System.out.println("开始聊天");
    socket = new Socket("192.168.1.100", 2222);
    out = new DataOutputStream(socket.getOutputStream());
    input = new DataInputStream(socket.getInputStream());

    out.writeUTF(text.getText().toString());
    out.flush();
    String msg = "";
    if ((msg = input.readLine()) != null) {
     System.out.println(msg);
     Toast.makeText(TestScoketActivity.this, msg, 3000).show();
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

 class MyHandler extends Handler {
  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   super.handleMessage(msg);
   Bundle bundle = msg.getData();
   String str = bundle.getString("user");
   if (str.equals("")) {
    content.setText(str);
   }
  }

 }

 

服务端

 

 

public class Service {
 private ServerSocket ss;
 private Socket socket;
 private DataInputStream input;
 private DataOutputStream out;
 private String[]msgs;
 
 private Map<String,Object>usersMap=new HashMap<String,Object>();
 public Service(){
  new ServiceThread().start();
 }
 //连接服务器
 class ServiceThread extends Thread{
  public void run(){
   try {
    ss=new ServerSocket(2222);
    System.out.println("服务已开启:");
    while(true){
     socket=ss.accept();
     System.out.println(socket);
     input=new DataInputStream(socket.getInputStream());
     System.out.println(socket.getInetAddress());
       out=new DataOutputStream(socket.getOutputStream());
      String msg="";
      if((msg=input.readUTF())!=null){
      if(!"".equals(msg)){
      msgs=msg.trim().split("@#");
      usersMap.put(msgs[3], socket);
      Iterator<String> userNames=usersMap.keySet().iterator();
      while (userNames.hasNext()) {
       String userName=userNames.next();
       Socket s=(Socket) usersMap.get(userName);
       DataOutputStream outMsg=new DataOutputStream(s.getOutputStream());
       
       //outMsg.writeUTF("你好");
       outMsg.writeChars("你好----");
       System.out.println("发送给:"+msgs[1]);
       System.out.println("消息:"+msgs[2]);
       System.out.println("发送人"+msgs[3]);
       System.out.println("所有人接收:"+msgs[0]);
      }
       
      }
      }
    //  out.writeUTF("连接成功");
      out.flush();
    }
   } catch (Exception e) {
    e.printStackTrace();
   }finally{
 
     try {
      input.close();
     } catch (IOException e) {
      e.printStackTrace();
     }
   
   }
  }
  
  
 }