接上一篇文章的Android Studio登陆页面,注册页面大致相同,就不重复写了。
还有需要注意的是:
GET/POST方式服务器运行方式是:右键项目-运行方式-Run On Server
Socket方式服务器是写在main函数里的,要加线程也可以自己加,运行方式是:右键项目-运行方式-Java应用程序
我不会承认。。因为这个原因。。我一直启动tomcat,找了几个小时bug。。。出现
java.lang.IllegalArgumentException 非法参数异常
还有,输入流/输出流等到最后再关闭,不然会出现Socket close异常信息。
最后我想说。。数据结构真的要学好,我光是想由换行截取字符串 .split() 都没想起来。。。惭愧
客户端:
package android.zdd.com.web;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.URLEncoder;
/**
* Created by Ms.zhan on 2018/3/7.
*/
public class WebServiceSocket {
public static String executeSocket(String username, String password) {
try {
Socket socket_client =new Socket("169.254.58.31",8080);//端口号可随意编写,只需和服务器端口号一致即可。
//发送给服务器消息
OutputStream os = socket_client.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(username + "\n" + password);
//接受服务器消息
InputStream is = socket_client.getInputStream();
DataInputStream dis = new DataInputStream(is);
String content = dis.readUTF();
socket_client.close();
return content;
} catch (Exception e) {
Log.i("SocketActivity", e.getMessage());
//e.printStackTrace();
}
return null;
}
}
服务器:
package com.servlet;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.service.Service;
public class SocketLet {
private static ServerSocket ss;
private static String readMessage;
public static void main(String[] args) {
try {
ss = new ServerSocket(9999);
while (true) {
Socket socket_client = ss.accept();//停在这里,不继续执行下去
InputStream is = null;
DataInputStream dis = null;
OutputStream os = null;
DataOutputStream dos = null;
try {
String username = "", password = "";
// 接受客户端消息
is = socket_client.getInputStream();
dis = new DataInputStream(is);
readMessage = dis.readUTF();
String[] strs = readMessage.split("\n");
for (int i = 0, len = strs.length; i < len; i++) {
System.out.println(strs[i].toString());
if (i == 0)
username = strs[i];
if (i == 1)
password = strs[i];
}
System.out.println("username=" + username + ",password=" + password);
Service service = new Service();
// 验证处理
boolean log = service.login(username, password);
if (log) {
System.out.println("log success");
} else {
System.out.println("log fail");
}
// 发送客户端消息
os = socket_client.getOutputStream();
dos = new DataOutputStream(os);
if (log) {
dos.writeUTF("用户名:" + username + "密码: " + password);
} else {
dos.writeUTF("false");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
is.close();
dis.close();
os.close();
dos.close();
socket_client.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}