版本一 创建简单的连接

服务器端

package cn.hanquan.tcp;import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/** 创建服务器* 1、指定端口 使用ServerSocket创建服务器* 2、阻塞式等待链接 accept* 3、操作:输入输出操作* 4、释放资源*/
public class Server {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket创建服务器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待链接 acceptSocket client = server.accept();System.out.println("一个客户端建立了链接");// 3、操作:输入输出操作DataInputStream dis = new DataInputStream(client.getInputStream());String data = dis.readUTF();System.out.println(data);// 4、释放资源dis.close();client.close();}
}

客户端

package cn.hanquan.tcp;import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;/** 创建客户端* 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口* 2、操作:输入输出流操作* 3、释放资源*/
public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:输入输出流操作DataOutputStream dos = new DataOutputStream(client.getOutputStream());String data = "hello";dos.writeUTF(data);dos.flush();// 3、释放资源dos.close();client.close();}
}

运行结果

版本二:输入用户名、密码

server

package cn.hanquan.tcp;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/** 创建服务器* 1、指定端口 使用ServerSocket创建服务器* 2、阻塞式等待链接 accept* 3、操作:输入输出操作* 4、释放资源*/
public class Server {public static void main(String[] args) throws IOException {String name = "root";String pwd = "123";System.out.println("------Server------");// 1、指定端口 使用ServerSocket创建服务器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待链接 acceptSocket client = server.accept();System.out.println("一个客户端建立了链接");// 3、操作:输入输出操作DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();// 分析String[] dataArray = datas.split(" ");System.out.println("你输入的用户名为:" + dataArray[0]);System.out.println("你输入的用户名为:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];//发送结果DataOutputStream dos = new DataOutputStream(client.getOutputStream());if(uname.equals(name)&&upwd.contentEquals(pwd)) {//yesdos.writeUTF("登录成功");}else {//nodos.writeUTF("用户名或密码错误");}// 4、释放资源dis.close();client.close();}
}

client

package cn.hanquan.tcp;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;/** 创建客户端* 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口* 2、操作:输入输出流操作* 3、释放资源*/
public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");BufferedReader console = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入用户名:");String uname = console.readLine();System.out.println("请输入密码:");String upwd = console.readLine();// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:输入输出流操作DataOutputStream dos = new DataOutputStream(client.getOutputStream());dos.writeUTF(uname + " " + upwd);dos.flush();// 接收结果DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();System.out.println(datas);// 3、释放资源dos.close();client.close();}
}


版本三:文件上传

server

package cn.hanquan.tcp;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/** 文件接收 大小无限制*/
public class Server {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket创建服务器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待链接 acceptSocket client = server.accept();System.out.println("一个客户端建立了链接");// 3、操作:文件存储InputStream is = new BufferedInputStream(new FileInputStream("头像.jpg"));OutputStream os = new BufferedOutputStream(new FileOutputStream("tcp.jpg"));byte[] flush = new byte[1024];int len = -1;while ((len = is.read(flush)) != -1) {os.write(flush, 0, len);}os.flush();// 4、释放资源is.close();os.close();client.close();}
}

client

package cn.hanquan.tcp;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;/** 文件上传 大小无限制*/
public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:文件上传InputStream is=new BufferedInputStream(new FileInputStream("头像.jpg"));OutputStream os=new BufferedOutputStream(client.getOutputStream());byte[]flush=new byte[1024];int len=-1;while((len=is.read(flush))!=-1) {os.write(flush,0,len);}os.flush();// 3、释放资源os.close();is.close();client.close();}
}


版本四:多用户登录

服务端

(1)封装之前的服务端

package cn.hanquan.tcp;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/** 服务器 多用户登录*/
public class LoginMultiServer {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket创建服务器ServerSocket server = new ServerSocket(8888);boolean status = true;while (status) {// 2、阻塞式等待链接 acceptSocket client = server.accept();System.out.println("一个客户端建立了链接");new Thread(new Channel(client)).start();// 成功连接,就开启一个线程检测登录}}
}class Channel implements Runnable {Socket client;public Channel(Socket client) {this.client = client;}@Override// 3、操作:输入输出操作public void run() {DataInputStream dis = null;String datas = null;try {dis = new DataInputStream(client.getInputStream());datas = dis.readUTF();// 分析String[] dataArray = datas.split(" ");System.out.println("你输入的用户名为:" + dataArray[0]);System.out.println("你输入的用户名为:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];// 发送结果DataOutputStream dos = new DataOutputStream(client.getOutputStream());if (uname.equals("root") && upwd.contentEquals("123")) {dos.writeUTF("登录成功");} else {dos.writeUTF("用户名或密码错误");}// 4、释放资源dis.close();client.close();} catch (IOException e) {e.printStackTrace();}}
}

(2)封装之后的服务端

package cn.hanquan.tcp;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/** 服务器 多用户登录*/
public class LoginMultiServer {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 创建服务器ServerSocket server = new ServerSocket(8888);boolean status = true;while (status) {// 2、阻塞式等待链接Socket client = server.accept();System.out.println("一个客户端建立了链接");//每建立一个连接就 new 一个线程new Thread(new Channel(client)).start();}}
}class Channel implements Runnable {Socket client;// 构造器public Channel(Socket client) {this.client = client;}@Overridepublic void run() {String datas = receive();boolean successLogIn = check(datas);send(successLogIn);}// 接收客户端数据public String receive() {DataInputStream dis = null;String datas = null;try {dis = new DataInputStream(client.getInputStream());datas = dis.readUTF();} catch (IOException e) {e.printStackTrace();}return datas;}// 检测登录是否成功public boolean check(String datas) {try {// 分析String[] dataArray = datas.split(" ");System.out.println("你输入的用户名为:" + dataArray[0]);System.out.println("你输入的用户名为:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];// 发送结果if (uname.equals("root") && upwd.contentEquals("123")) {return true;} else {return false;}} catch (Exception e) {e.printStackTrace();}return false;}public void send(boolean flag) {try {DataOutputStream dos = new DataOutputStream(client.getOutputStream());if (flag)dos.writeUTF("登录成功");elsedos.writeUTF("用户名或密码错误");} catch (IOException e) {e.printStackTrace();}}
}

客户端

package cn.hanquan.tcp;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/** 客户端*/
public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");BufferedReader console = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入用户名:");String uname = console.readLine();System.out.println("请输入密码:");String upwd = console.readLine();// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:将用户名和密码传输到服务端DataOutputStream dos = new DataOutputStream(client.getOutputStream());dos.writeUTF(uname + " " + upwd);dos.flush();// 接收结果DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();System.out.println(datas);// 3、释放资源dos.close();client.close();}
}

运行结果

【Java网络编程(三)】TCP的使用——模拟用户登录相关推荐

  1. Java网络编程:TCP实现群聊私聊代码

    Java网络编程:TCP实现群聊&私聊代码 和上一篇博客差不多,只不过是在群里的基础之上增加了私聊的功能,我们约定,私聊格式为:@xxx:msg 如何实现私聊呢,加入客户端c给服务器发送消息, ...

  2. Java——网络编程三要素

    * A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...

  3. 【java网络编程】TCP三次握手、四次挥手,常见Socket通信BIO

    网络编程,网络通信 内容管理 TCP三次握手,四次挥手 TCP 建立连接 --- 三次握手 TCP断开 ---- 四次挥手 java网络IO BIO 同步阻塞 Socket通信模型 BIO网络通信De ...

  4. java基础5:工厂模式、单例模式、File文件类、递归、IO流、Properties配置文件、网络编程、利用IO流模拟注册登录功能、关于反射、JDK动态代理

    1.工厂模式 23种java设计模式之一 1)提供抽象类(基类) 2)提供一些子类,完成方法重写 3)提供一个接口:完成具体子类的实例化对象的创建,不能直接new子类,构造函数私有化. 优点:具体的子 ...

  5. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信.... 网页编程 ...

  6. Java网络编程:TCP,UDP,sock编程

    第一节 网络基础知识 常用的通信协议 MAC地址:(Media Access Control Address,媒体存取控制位址), IP:(Internet Protocol,网际协议) UDP:(U ...

  7. JAVA网络编程:TCP/IP数据包结构

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解网络数据 ...

  8. Java网络编程:TCP实现聊天

    客户端 package com.zhl.nett;import java.io.IOException; import java.io.OutputStream; import java.net.In ...

  9. 【Java 网络编程】TCP 连接 断开 机制 ( 三次握手 | 四次挥手 )

    文章目录 I TCP 连接建立流程 ( 三次握手 ) II SYN 和 ACK 中的随机值 III TCP 连接建关闭流程 ( 四次挥手 ) IV TCP 连接断开的保证 V 四次挥手的必要性 I T ...

最新文章

  1. Java常见面试题(持续更新)
  2. Java程序内存分析
  3. linux ftp登录命令_Linux使用pinky命令查询登录用户信息
  4. RabbitMQ消息应答------ack机制
  5. 配置bitnami-redmine自带的Subversion
  6. POJ3265 Problem Solving ——动态规划——Pku3265
  7. edit plus 中文插件_iMindMap手绘思维导图软件中文版
  8. Spring中BeanPostProcessor 执行过程
  9. 面向对象的类测试技术研究
  10. smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?
  11. smoothl1函数_Faster RCNN的损失函数(Loss Function)
  12. svn   /lib64/libz.so.1: no version information available
  13. ZCANPRO-CAN/CANFD收发软件:安装及使用
  14. Web 方向学习路线
  15. 文本加密(PTA厦大慕课)
  16. A4纸在屏幕上的像素尺寸
  17. input中加入图标实现搜索框
  18. 蓝牙定位网关-蓝牙网关通过三角定位获取蓝牙设备的位置
  19. spark写出分布式的训练算法_Spark on Angel
  20. STIL和WGL的例子文件

热门文章

  1. Python配置-virtualenv和conda的区别
  2. Django的主要开发流程(以扩充用户模型为例)
  3. SVD原理及其应用导论
  4. ZOJ1654(二分构图题典例)
  5. OkHttp3中的代理与路由
  6. 滑动窗口算法学习(一)
  7. MySQL基础总结(二)
  8. 华为云网络覆盖全球2500+站点,打造高品质、低成本接入体验
  9. 算法工程师眼中的AI岗位
  10. 解决多进程模式下引起的“惊群”效应