关于网络编程的一些问题

Android 码拜 3年前 (2017-04-18) 313次浏览
首先下面的代码是可用正常的。
问题1,手机端的代码有3个异常处理,本人之前先是用 throws 语句但是却不能编译过去,无论把 throws 放在 run 函数后面还是 onCreate 函数后面都无法编译。这是为什么
问题2,服务器端很明显是把IP、端口、数据都混合在一个流里面接受,然后用3个函数来分别读取。那么问题来了,本人假如服务器用Windows API在 Visual C++编写怎么办,或用C#写服务器。
问题3,这个问题与下面的代码无关。发布下面的手机程序到手机运行的时候,手机并未提示程序要求网络权限或WIFI权限或移动网络权限,但是程序确实可用。通常在安装其他软件的时候手机都会提示某某程序要求网络权限,然后询问能否允许的。之后本人搜了一下关于安卓网络编程方面的书,发现某些书是把socket编程单独列为一章、WIFI单独一章、NFC一章、蓝牙一章、网页一章,从目录来看似乎这些编程不是一种方法。
问题4,这个问题与下面代码无关。最近几年好像智能家居挺火热的,不知道有谁接触过。听说有人在下班的时候远程家里的电饭锅和空调开机,进家门的时候直接就吃饭了。这对路由器、空调、电饭锅等硬件有什么要求。

//运行于手机真机的代码
package com.example.administrator.ffffff;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class MainActivity extends Activity {
    EditText show;
    protected void onCreate(Bundle savedInstanceState)//throws SocketException,UnknownHostException, IOException
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = (EditText)findViewById(R.id.show);
        new Thread()
        {
            public void run()
            {
                try {
                    //1,创建UDP服务,通过 DatagramSocket 对象
                    DatagramSocket ds = new DatagramSocket();
                    //2,确定数据,并封装成数据包
                    byte[] buf = "android:   udp ge men lai le".getBytes();
                    DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.101"), 10000);
                    //3,通过socket服务将已有的数据包发送出去,通过send发
                    ds.send(dp);
                    //4,关闭资源
                    ds.close();
                }
                catch( SocketException e)
                {}
                catch (UnknownHostException e)
                {}
                catch (IOException e)
                {}
            }
        }.start();
    }
}
//运行于 Windows  的代码
import java.util.concurrent.locks.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.net.*;
public class recv
{
	public static void main(String[]args)throws Exception
	{
		//1、创建UDP socket,建立端点
		DatagramSocket ds = new DatagramSocket(10000);
		//2、定义数据包,用于存储数据
		byte [] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		//3、通过服务的recvive方法讲收到的数据存入数据包中
		ds.receive(dp);
		//4、通过数据包的方法获取其中的数据
		String ip = dp.getAddress().getHostAddress();
		String date = new String(dp.getData(), 0, dp.getLength());
		int port = dp.getPort();
		System.out.println(ip);
		System.out.println(date);
		System.out.println(port);
		ds.close();

	}
}
解决方案

20

问题3,这个问题与下面的代码无关。发布下面的手机程序到手机运行的时候,手机并未提示程序要求网络权限或WIFI权限或移动网络权限,但是程序确实可用。通常在安装其他软件的时候手机都会提示某某程序要求网络权限,然后询问能否允许的。之后本人搜了一下关于安卓网络编程方面的书,发现某些书是把socket编程单独列为一章、WIFI单独一章、NFC一章、蓝牙一章、网页一章,从目录来看似乎这些编程不是一种方法
好像这并没有用到网络

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于网络编程的一些问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)