电竞比分网-中国电竞赛事及体育赛事平台

分享

android規(guī)定即使socket發(fā)送這種操作也不能放在主線程里

 quasiceo 2016-03-10
android規(guī)定即使socket發(fā)送這種操作也不能放在主線程里。NetworkOnMainThreadException

UDP Socket基本思路小程序(2) 多線程簡單聊天程序

發(fā)表于2年前(2014-05-21 21:48)   閱讀(768) | 評論(0 6人收藏此文章, 我要收藏
0
摘要 參考:傳智播客畢老師Java基礎(chǔ)視頻

發(fā)送端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
 
/**
 * 發(fā)送端
 * @author Administrator
 *
 */
public class Send implements Runnable{
     
    private DatagramSocket ds;
     
    public Send(DatagramSocket ds){
        this.ds = ds;
    }
     
    @Override
    public void run() {
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while((line = br.readLine()) != null){
                byte[] b = line.getBytes();
                DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getByName("127.0.0.1"), 8888);
                //發(fā)送廣播,群聊
//              DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getByName("192.168.123.255"), 8888);
                ds.send(dp);
                if("over".equalsIgnoreCase(line))
                    break;
            }
            ds.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

接收端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.net.DatagramPacket;
import java.net.DatagramSocket;
 
/**
 * 接收端
 * @author Administrator
 *
 */
public class Receive implements Runnable {
 
    private DatagramSocket ds;
 
    public Receive(DatagramSocket ds) {
        this.ds = ds;
    }
 
    @Override
    public void run() {
        try {
            while (true) {
                byte[] b = new byte[1024];
                DatagramPacket dp = new DatagramPacket(b, b.length);
                ds.receive(dp);
                String ip = dp.getAddress().getHostAddress();
                int port = dp.getPort();
                String text = new String(dp.getData(), 0, dp.getLength());
                System.out.println(ip+":" + port + "==" + text);
                if("over".equalsIgnoreCase(text)){
                    System.out.println("-----退出聊天-----");
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

測試

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.IOException;
import java.net.DatagramSocket;
/**
 * 測試
 * @author Administrator
 *
 */
public class ChatTest {
     
    public static void main(String[] args) throws IOException {
 
        DatagramSocket dsend = new DatagramSocket();
        DatagramSocket dsRece= new DatagramSocket(8888);
        Send s = new Send(dsend);
        Receive r = new Receive(dsRece);
        new Thread(s).start();
        new Thread(r).start();
    }
}

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多