欢迎使用CSDN-markdown编辑器

服务器端代码

服务端代码很简单:
1:创建一个线程,在线程里面 创建一个ServerSocket对象和创建一个阻塞式Socket;
代码如下:

 public void run() {
    try {
        //创建一个serverSocket对象
        ServerSocket serverSocket = new ServerSocket(Main.port);
        while(true){
            //阻塞线程
            Socket socket = serverSocket.accept();
            System.out.println("连接成功");
            MyThread2 thread2 = new MyThread2(socket);
            thread2.start();
            ChatManager.getInstance().add(thread2);
        }

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

2:再创建一个带参的线程,用于数据的读取,具体代码如下

public void out(String out) {
    try {
        socket.getOutputStream().write(out.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void run() {
    try {
        BufferedReader bf = new BufferedReader(new InputStreamReader(
                socket.getInputStream(), "UTF-8"));
        String line = null;
        while ((line = bf.readLine()) != null) {
            System.err.println(line);
            ChatManager.getInstance().push(this, line);

        }
        bf.close();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

3:再创建一个单例类,用来对事件进行分发。具体代码如下

Vector<MyThread2> vector = new Vector();
public void add(MyThread2 thread2) {
    vector.add(thread2);

}

public void push(MyThread2 cs,String out){
    for (int i = 0; i < vector.size(); i++) {
        MyThread2 tMyThread2 = vector.get(i);
        if(!cs.equals(tMyThread2)){
            tMyThread2.out(out+"\n");
        }
    }
}

}

以上是服务端代码。。。。

接下来写客户端代码:其实也很简单
1:先连接socket,进行连接操作

  public void connect(View v) {
    final String contents = ipconnet.getText().toString();
        AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() {
            @Override
            protected Void doInBackground(Void... voids) {
                try {
                    socket = new Socket(contents, 5011);
                    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    publishProgress("@success");
                }catch (Exception e){
                    Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                }
                String line;
                try {
                    while ((line = reader.readLine()) != null) {
                        publishProgress(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onProgressUpdate(String... values) {
                if (values[0].equals("@success")){
                    Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();
                }
                content.append("别人说:"+values[0]+"\n");
                super.onProgressUpdate(values);



            }
        };
        read.execute();

}

2:接下来的是往服务端进行写数据,代码如下

public void send(View v) {
    try {
        content.append("我说:"+inputcontent.getText().toString()+"\n");
        writer.write(inputcontent.getText().toString()+"\n");
        writer.flush();
        inputcontent.setText("");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

到这,别忘了给项目加上网络权限,所以的代码全部呈现。项目下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值