java源码示例展示:
服务端:
1 package tcp2; 2 3 import java.io.IOException; 4 import java.net.InetAddress; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 /** 9 * 登录的服务器10 * @author superdrew 11 * TCP 登录 12 * 功能:用户在客户端输入用户名和密码提交给服务器,服务器接收并处理,处理完后给客户端一个返回信息13 * 客户端接口服务器的反馈消息并输出14 * 缺点:服务器处理一次用户请求之后,就关闭了15 * 应该是服务器一直监听,可以处理多个用户的请求16 * 使用while循环类似达到效果,但是不可以17 * 不是并行,是串行的。请求一次,只能等待该次请求执行完毕18 * 19 * 问题:学生1-------咨询1 学生2---------咨询1 学 生3------------咨询120 * 21 * 解决:22 * 学生1------------ ---------------咨询1 23 * 学生2 ------------ 前台接待 ---------------咨询224 * 学生3------------ ----------------咨询325 * 26 * 使用线程来处理27 */28 public class LoginServer {29 public static void main(String[] args) throws IOException {30 //1.创建一个serversocket 创建服务31 @SuppressWarnings("resource")32 ServerSocket serverSocket = new ServerSocket(8888);//端口 8888 IP地址是本机33 int i =1;34 while(true){35 Socket socket = serverSocket.accept();36 InetAddress ia = socket.getInetAddress();37 new LoginThread(socket).start();38 System.out.println("第"+ i++ +"个人来访问,访问者ip是:"+ia.getHostAddress());39 }40 }41 }
客户端:
1 package tcp2; 2 3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 import java.net.UnknownHostException;10 import java.util.Scanner;11 12 /**13 * 登录的客户端14 * @author superdrew15 *16 */17 public class LoginClient {18 public static void main(String[] args) throws UnknownHostException, IOException {19 //1.创建一个socket 连接服务器20 Socket socket = new Socket(InetAddress.getLocalHost(), 8888);//必须要知道服务器IP和端口号21 @SuppressWarnings("resource")22 Scanner sc = new Scanner(System.in);23 //2.通过 socket 发送数据给服务器24 //OutputStream os = new FileOutputStream("d:/b.txt");输出到文件25 System.out.println("请输入登入信息:");26 String info = sc.nextLine();27 OutputStream os = socket.getOutputStream();28 DataOutputStream dos = new DataOutputStream(os);29 dos.writeUTF(info);30 //3.接收服务器返回的消息31 DataInputStream dis = new DataInputStream(socket.getInputStream());32 String result = dis.readUTF();33 System.out.println("服务器返回的消息response:"+result);34 35 //4.关闭资源36 dis.close();37 dos.close();38 socket.close();39 }40 }
多人登入的线程:
1 package cn.com.sxt.tcp2; 2 3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.net.Socket; 8 9 /**10 * 登录线程11 * @author superdrew12 *13 */14 public class LoginThread extends Thread{15 private Socket socket;16 17 public void setSocket(Socket socket){18 this.socket = socket;19 }20 21 public LoginThread(Socket socket){22 this.socket = socket;23 }24 25 public void run() {26 InputStream is;27 DataOutputStream dos = null;28 DataInputStream dis = null;29 30 try {31 is = socket.getInputStream();32 dis = new DataInputStream(is);33 String result = dis.readUTF();34 System.out.println("客户端发送来的消息:"+result);35 //4.给客户端反馈一个消息 36 dos = new DataOutputStream(socket.getOutputStream());37 if("superdrew".equals(result)){38 dos.writeUTF("登录成功");39 }else{40 dos.writeUTF("登录失败");41 }42 } catch (IOException e) {43 e.printStackTrace();44 }finally{45 try {46 if(dos!=null){47 dos.close();//关闭dos48 }49 } catch (IOException e) {50 e.printStackTrace();51 }52 try {53 if(dis!=null){54 dis.close();//关闭dis55 }56 } catch (IOException e) {57 e.printStackTrace();58 }59 try {60 if(socket!=null){61 socket.close();//关闭socket62 }63 } catch (IOException e) {64 e.printStackTrace();65 }66 }67 68 }69 }
操作步骤:
①运行服务端;②运行客户端;③输入登入信息为superdrew;④在console窗口下点击,可以看到这是第几次登入以及相关记录的信息;
结果展示---如图: