TCP网络编程
练习题
编写一个服务器和一个客户端
1)服务器上保存了几个用户名和对应的密码;且能验证客户端发送过来的用户名和密码,是否和保存的某个用户名和对应的密码一致。
2)客户端能连接到服务器,并把用户在键盘上输入的用户名和密码,发送到服务器上。
不完整代码,有错误还请各位大佬指出(鞠躬)
TCPTest.java
package internettest;
import org.junit.Test;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 编写一个服务器和一个客户端
* 1)服务器上保存了几个用户名和对应的密码;且能验证客户端发送过来的用户名和密码,是否和保存的某个用户名和对应的密码一致.
* 2)客户端能连接到服务器,并把用户在键盘上输入的用户名和密码,发送到服务器上
*/
public class TCPTest {
//客户端
public static void main(String[] args) {
Socket socket = null;
OutputStream os = null;
try {
InetAddress inet = InetAddress.getByName("127.0.0.1");
socket = new Socket(inet, 1122);
Scanner scanner = new Scanner(System.in);
//把用户名和密码连接为一个字符串user
System.out.println("请输入用户名:");
String username = scanner.next();
System.out.println("请输入密码:");
String password = scanner.next();
String user = username + "," + password;
//传给服务端
os = socket.getOutputStream();
os.write(user.getBytes());
socket.shutdownOutput();
//接收登录结果,1表示登录成功,0则失败
InputStream is = socket.getInputStream();
int result = 0;
while ((result = is.read()) != -1) {
if (result == 1) {
System.out.println("登录成功");
} else if (result == 0) {
System.out.println("登录失败");
}
}
//接收服务器的信息
//不知道为什么不能用这个
// InputStream is = socket.getInputStream();
// int data;
// while ((data = is.read()) != -1){
// System.out.println((char)data);
// }
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//服务端
@Test
public void server() {
ServerSocket ss = null;
Socket socket = null;
BufferedReader br = null;
try {
//暂时定死一个用户名和密码
String username = "admin";
String password = "1234";
//1.
ss = new ServerSocket(1122);
//2.
socket = ss.accept();
//3.读取客户端的值
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String user = br.readLine();
System.out.println(user);
//4.返回客户端
OutputStream os = socket.getOutputStream();
String[] users = user.split(",");
// for (String s : users){
// System.out.println(s);
// }
if (users[0].equals(username) && users[1].equals(password)) {
os.write("登录成功".getBytes());
//os.write("1".getBytes());
System.out.println("登录成功");
} else {
os.write("登陆失败".getBytes());
//os.write("0".getBytes());
System.out.println("登陆失败");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ss != null) {
//5.
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果如下:
客户端:
服务端: