博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程_TCP编程
阅读量:5115 次
发布时间:2019-06-13

本文共 4692 字,大约阅读时间需要 15 分钟。

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 }
LoginServer.java

客户端:

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 }
LoginClient.java

多人登入的线程:

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 }
LoginThread.java

操作步骤:

①运行服务端;②运行客户端;③输入登入信息为superdrew;④在console窗口下点击,可以看到这是第几次登入以及相关记录的信息;

结果展示---如图:

 

转载于:https://www.cnblogs.com/superdrew/p/8098619.html

你可能感兴趣的文章
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>