Java 模拟基于TCP的Socket通信
效果图:
多线程服务器代码
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MutiThreadServer implements Runnable {
Socket socket;
public MutiThreadServer(Socket socket) {
this.socket = socket;
}
public static void main(String[] args) throws IOException {
int count=0;
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("listening");
while (true){
Socket socket1 = serverSocket.accept();
System.out.println("connected");
new Thread(new MutiThreadServer(socket1)).start();
count++;
System.out.println("客户端的数量:"+count);
InetAddress address = socket1.getInetAddress();
System.out.println("当前客户端的IP为:"+ address.getHostAddress());
}
}
@Override
public void run() {
InputStream inputStream=null; //字节输入流
InputStreamReader inputStreamReader=null; //把字节输入流转化为字符输入流
BufferedReader bufferedReader=null; //为输入流添加缓冲
OutputStream outputStream=null;
PrintWriter printWriter=null;
try {
/**
* 获取客户端的输入信息
*/
inputStream = socket.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);
String info = null;
while ((info = bufferedReader.readLine()) != null){
System.out.println("我是服务器,收到客户端信息:"+info);
}
socket.shutdownInput(); //关闭输入流
/**
* 响应客户端
*/
//获取输出流,用于向服务器发送请求
outputStream = socket.getOutputStream();
//把输出流转化为打印流
printWriter = new PrintWriter(outputStream);
printWriter.write("用户名是:Harry 欢迎您!!!");
printWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
if (inputStream != null)
inputStream.close();
if (inputStream != null)
inputStreamReader.close();
if (bufferedReader != null) {
bufferedReader.close();
}
if (outputStream != null) {
outputStream.close();
}
if (printWriter != null) {
printWriter.close();
}
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
单线程服务器
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
/**
* 创建一个服务器端的Socket,并指定要监听的端口
*/
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("````````````服务器即将启动````````````");
/**
* 启动监听
*/
Socket socket = serverSocket.accept();
/**
* 获取客户端的输入信息
*/
InputStream inputStream = socket.getInputStream(); //字节输入流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //把字节输入流转化为字符输入流
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //为输入流添加缓冲
String info = null;
while ((info = bufferedReader.readLine()) != null){
System.out.println("我是服务器,收到客户端信息:"+info);
}
socket.shutdownInput(); //关闭输入流
/**
* 响应客户端
*/
OutputStream outputStream = socket.getOutputStream(); //获取输出流,用于向服务器发送请求
PrintWriter printWriter = new PrintWriter(outputStream); //把输出流转化为打印流
printWriter.write("用户名是:Harry 欢迎您!!!");
printWriter.flush();
//关闭资源
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
客户端
import java.io.*;
import java.net.Socket;
public class ClientSocket {
public static void main(String[] args) throws IOException {
/**
* 创建一个客户端的Socket,并指定服务器地址和端口号
*/
Socket socket = new Socket("localhost",1234);
OutputStream outputStream = socket.getOutputStream(); //获取输出流,用于向服务器发送请求
PrintWriter printWriter = new PrintWriter(outputStream); //把输出流转化为打印流
printWriter.write("用户名是:Harry,密码是:123");
printWriter.flush();
socket.shutdownOutput(); //关闭输出流
/**
* 获取服务器的信息
*/
InputStream inputStream = socket.getInputStream(); //字节输入流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //把字节输入流转化为字符输入流
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //为输入流添加缓冲
String info = null;
while ((info = bufferedReader.readLine()) != null){
System.out.println("我是客户端,收到服务器信息:"+info);
}
socket.shutdownInput(); //关闭输入流
/**
* 关闭资源
*/
inputStream.close();
inputStreamReader.close();
bufferedReader.close();
printWriter.close();
outputStream.close();
socket.close();
}
}
注:测试的时候只需要启动其中一个服务器就即可。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
利用python构建一个简单的推荐系统
本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解。 什么是推荐系统? 推荐系统的目的是通过发现数据集中的模式,为用户提供与之最为相关的信息。当你访问Netflix的时候,它也会为你推荐电影。音乐软件如Spotify及Deezer也使用推荐系统进行音乐推荐。 下图说明了推荐系统是如何在电子商务网站的上下文中工作的。 两名用户都在某电商网站购买了A、B两种产品。当他们产生购买这个动作的时候,两名用户之间的相似度便被计算了出来。其中一名用户除了购买了产品A和B,还购买了C产品,此时推荐系统会根据两名用户之间的相似度会为另一名用户推荐项目C。 推荐系统的主要分类 目前,主流的推荐系统包括基于内容的推荐以及协同过滤推荐。协同过滤简单来说就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相
-
下一篇
Java 模拟基于UDP的Socket通信
效果图: 多线程服务器 客户端 单线程服务器 多线程服务器 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPMutiThreadServer implements Runnable { DatagramPacket datagramPacket; //数据报包 byte[] data1; //存放数据的变量 public UDPMutiThreadServer(DatagramPacket datagramPacket,byte[] data1) { this.datagramPacket = datagramPacket; this.data1=data1; } public static void main(String[] args) throws SocketException { int ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker容器配置,解决镜像无法拉取问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- CentOS7设置SWAP分区,小内存服务器的救世主
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作