首先呢,需要大家在“控制面板-网络和共享中心-高级共享设置”中查看下当前网络的设置,如果没有选择“启用网络发现”、“启用文件和打印机共享”这两项的话,是无法看到其他网络设备的。
之后进入“服务”(Win+R组合键后输入services.msc)中看下“Server”这个服务是不是“自动”启动的,如果不是的话,把启动方式改成“自动”就行了。
接下来,进入“控制面板-程序和功能”,在左侧的“启用或关闭Windows 功能”中找到“SMB 1.0/CIFS文件共享支持” 选项,全部勾选上。
现在去网络中看看,如果还是找不到网络中的其他电脑或打印机、服务器一类的设备,那就只能来个终极大招了。Win+R组合键后输入regedit进入注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters
在它的右侧新建个名为“AllowInsecureGuestAuth”的DWORD(32位)键值,并将数值数据修改为1即可。
重启之后,无论什么问题(断网不算),都可以在网络中看到同局域网内其他小伙伴的电脑了哦。
笔者先学的Javaweb,最简单的用Tomcat,通过路由构建的局域网,就能通过手机浏览器访问,实现简单的局域网间访问。意外学习了半个月的Android,便想通过App来完成,同时实验室还有学硬件的小伙伴...
博客一血,就献给Android和Javaweb了。希望能帮到和我一样是初学者的小伙伴,同时也请大虾指点。
如题,相信学了Java的同志们,大多都会在这两条路上出选择。然而两者又是相辅相成,不分你我。
笔者先学的Javaweb,最简单的用Tomcat,通过路由构建的局域网,就能通过手机浏览器访问,实现简单的
局域网间访问。意外学习了半个月的Android,便想通过App来完成,同时实验室还有学硬件的小伙伴,一起
捣鼓了个通过蓝牙模块实时测温湿度的小东西,若将测得的数据连入后台,就能开始做小规模的数据分析
了。
下面进入正题:
服务器 :apache-tomcat-7.0.42
Android:Android Studio 2.1.1
首先创建服务器端:
代码如下:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;
public class loginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println(username+":"+password); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String msg = null; if(username != null && username.equals("xiaoming") && password != null && password.equals("123")){ msg="登录成功"; } else { msg = "登录失败"; } out.print(msg); out.flush(); out.close(); } }
复写doGet()方法,当用户名为"xiaoming"密码为“123”时,返回“登录成功”,否则返回”登录失败“
移动端
清单文件
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
一定要给网络权限!!网络权限!!网络!!网!
layout代码:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/username" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/psw" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
android:id="@+id/btn"
android:layout_gravity="right" />
最简单的布局,不多说
Activity代码: import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;
import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;
public class loginActivity extends Activity{
Button btn;
TextView uname;
TextView psw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
psw= (TextView) findViewById(R.id.psw);
uname= (TextView) findViewById(R.id.username);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getId()==R.id.btn){
String username=uname.getText().toString();
String pass= psw.getText().toString();
String urlStr="http://192.168.6.2/loginServlet?"+
"username="+username+"&password="+pass;
Log.d("lll","......."+urlStr);
new Async().execute(urlStr);
}
}
});
}
class Async extends AsyncTask
{
@Override
//后台子线程
protected String doInBackground(String... params) {
String result="";
String path=params[0];
try {
URL url=new URL(path);
HttpURLConnection conn=
(HttpURLConnection) url.openConnection();
//文件的读写
InputStream is=conn.getInputStream();
byte[] b=new byte[2048];
int len =0;
while ((len=is.read(b))!=-1)
{
Log.d("lll", len+"");
result=new String (b);
Log.d("lll","........"+result);
Thread.sleep(200);//进程休眠,便于观看效果
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//实时更新的 主线程
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
}
//前台主线程
protected void onPostExecute(String result) {
showDialog(result);
super.onPostExecute(result);
}
}
private void showDialog(String msg){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg).setCancelable(false).setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
这是问题的关键了。 最先开始直接在button的点击事件里添加login连接Internet的方法。 但是这么会报android.os.NetworkOnMainThreadException。 原因是因为在Android4.0之后规定,Internet连接操作必须放在子进程里 所以我们就得借助一些对象啦。 笔者用的是AsyncTask这个类。