【android】与pc机进行UDP通信(二)
16lz
2021-01-26
上次讲到android虚拟机和pc机进行通讯,现在就将小程序复杂一点点。
pc将获得的数据原封不动得再发给android虚拟机。
示例图:
代码在原来的基础上进行了补充:
android端的client:
不解android虚拟机的IP设定。
pc将获得的数据原封不动得再发给android虚拟机。
示例图:
代码在原来的基础上进行了补充:
public class Server {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubDatagramSocket ds = new DatagramSocket(10000);while(true){byte [] b = new byte[1024];DatagramPacket dp = new DatagramPacket(b,b.length);ds.receive(dp);System.out.println("IP: "+dp.getSocketAddress());//输出内容:IP: /127.0.0.1:56934System.out.println("prot: "+dp.getPort());System.out.println("data: "+new String(dp.getData(),0,dp.getLength(),"utf-8"));// 上面和前一篇文章内容一样。只是多了一个server端的send。dp.getSocketAddress()这个就是获取android的InetaddressDatagramPacket dp2 = new DatagramPacket(dp.getData(), dp.getLength(), dp.getSocketAddress());ds.send(dp2);}}}
android端的client:
public class AndroidUdpActivity extends Activity { DatagramSocket ds = null; DatagramPacket dp,dp2 = null; Button b = null; EditText et = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) this.findViewById(R.id.button1); et = (EditText) this.findViewById(R.id.editText1); try {ds = new DatagramSocket(10001);} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();}b.setOnClickListener(new OnClickListener() {// TODO Auto-generated method stub@Overridepublic void onClick(View v) { //String s = "welcome to c....";String s = et.getText().toString();byte [] buf = s.getBytes();int length = buf.length;try {dp = new DatagramPacket(buf,length,InetAddress.getByName("10.0.2.2"),10000);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {ds.send(dp);et.setText("");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//黑体字处为在以前代码上新加的内容,即解析获得的内容。[b]byte [] data = new byte[1024];dp2 = new DatagramPacket(data, data.length);try {ds.receive(dp2);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//这里可以获得PC机上的IP,端口等信息。System.out.println("IP: " + dp2.getSocketAddress());//输出内容: IP: 10.0.2.2/10.0.2.2:10000try {System.out.println("data: "+new String(dp2.getData(),0,dp2.getLength(),"utf-8"));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}//ds.close();[/b]}}); }}
不解android虚拟机的IP设定。
更多相关文章
- android 五大应用开发框架是什么
- Android(安卓)XmlSerializer 换行
- Android内容提供器
- Android(安卓)Studio Api25 File Explorer 不显示内容问题的解决
- android 中使用Java反射Reflect,输出类中变量值,方便调试。
- Android登陆界面实现清除输入框内容和震动效果
- Android(安卓)开发(三)使用Stirngs资源文件的技巧
- Android(安卓)TableLayout TableRow点击变色效果
- Android下执行Runtime.getRuntime().exec后返回状态