java write os_java-BufferedWriter.write()似乎不起作用

我有两个Java应用程序,其中Android客户端连接到计算机上的服务器,并使用BufferedWriter通过websocket发送消息.

客户端:

try {

toast("Sending...");

Socket sock = new Socket(ip, PORT);

OutputStream os = sock.getOutputStream();

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

bw.flush();

bw.write("Hello Server!");

toast("Connected!");

} catch (UnknownHostException e) {

toast(e.getMessage());

} catch (IOException e) {

toast(e.getMessage());

}

服务器:

public static void main(String[] args) {

ServerSocket server;

ConnectionThread ct;

Socket s;

ExecutorService es = Executors.newSingleThreadExecutor();

try {

System.out.println("Starting server...");

server = new ServerSocket(1337);

s = server.accept();

ct = new ConnectionThread(s);

es.execute(ct);

} catch (IOException ex) {

ex.printStackTrace();

}

}

ConnectionThread类:

public class ConnectionThread implements Runnable {

private Socket sock;

private InputStream is;

private BufferedReader br;

private boolean online;

public ConnectionThread(Socket s) {

System.out.println("Creating connection thread.");

this.sock = s;

online = true;

}

@Override

public void run() {

String input = "";

try {

System.out.println("Starting to read...");

is = sock.getInputStream();

br = new BufferedReader(new InputStreamReader(is));

while (online) {

input = br.readLine();

if(input != null){

System.out.print("Received message: ");

System.out.println(input);

}

}

br.close();

is.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

当我先运行服务器,然后运行客户端时,客户端将显示“已连接!”.吐司,服务器的输出将是:

Starting server...

Creating connection thread.

Starting to read...

因此,似乎实际上正在建立连接,但是消息未到达.有人知道为什么会这样吗?

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ipEditText = findViewById(R.id.ipEditText); portEditText = findViewById(R.id.portEditText); Button connectButton = findViewById(R.id.connectButton); connectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ip = ipEditText.getText().toString(); int port = Integer.parseInt(portEditText.getText().toString()); new ConnectTask().execute(ip, String.valueOf(port)); } }); Button sendMessageButton = findViewById(R.id.sendMessageButton); sendMessageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showSendMessageDialog(); } }); }出现E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.rlswj, PID: 16184 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1668) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116) at java.net.SocketOutputStream.write(SocketOutputStream.java:161) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.BufferedWriter.flush(BufferedWriter.java:254) at java.io.PrintWriter.newLine(PrintWriter.java:482) at java.io.PrintWriter.println(PrintWriter.java:629) at java.io.PrintWriter.println(PrintWriter.java:670)
最新发布
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值