前后应该花了近3天半时间,就为了能通信成功,因为项目需求,需要在android 端同时开启socketServer服务和socket通信,socketServer用来接收消息,socket用来发送消息这样的模式,更为坑的是,我是用android端与C#的服务器端通信。
一开始就是用常规写法做android端的socket客户端:
Socket socket=new Socket();
socket.connect("ip地址","端口号");
OutputStream os= socket.getOutputStream();
String msg="abc";
os.write(msg.getBytes("utf8"));
os.flush();
C#服务器端就是接收不到我传过去的消息,我用java写的后端就能成功接受我常规写法传过去的数据
我后来改为另一种写法:
PrintWriter pw =new PrintWriter(new OutputStreamWriter(os,"utf-8"));
pw.println(msg);
pw.flush;
我在参考别人遇到的同类问题时,也看到,pw.print()方法,c#同样无法接收到,这个我倒没有去测试过。有待考证。。。
另外,在android需要作为socket的server端和client端的话呢,一定是要先开启服务端,再启用客户端(都是指的android 端)。通过先后启用两个服务service来达到两个线程的效果,不要单纯的启动两个线程,因为启用两个线程的执行顺序,一定不会达到你的预期结果的。只有通过startService(),因为service毕竟还是运行在主线程的。
因为serverSocket.accept()方法是进程阻塞的,因此一定是要放在线程中的,不然会阻塞当前主线程,切记切记!
这就是我三天总结出来的项目经验。谢谢~~