新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端

两个工程的读写操作线程类基本上完全相同
服务端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static final int PORT = 8000;//监听的端口号
public static void main(String[] args) {
Server server = new Server();
server.init();
}
public void init() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(PORT);
while (true) {
Socket client = serverSocket.accept();
//一个客户端连接就开户两个线程处理读写
new Thread(new ReadHandlerThread(client)).start();
new Thread(new WriteHandlerThread(client)).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(serverSocket != null){
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
*处理读操作的线程
*/
class ReadHandlerThread implements Runnable{
private Socket client;
public ReadHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataInputStream dis = null;
try{
while(true){
//读取客户端数据
dis = new DataInputStream(client.getInputStream());
String reciver = dis.readUTF();
System.out.println("客户端发过来的内容:" + reciver);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if(dis != null){
dis.close();
}
if(client != null){
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
* 处理写操作的线程
*/
class WriteHandlerThread implements Runnable{
private Socket client;
public WriteHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataOutputStream dos = null;
BufferedReader br = null;
try{
while(true){
//向客户端回复信息
dos = new DataOutputStream(client.getOutputStream());
System.out.print("请输入:\t");
// 键盘录入
br = new BufferedReader(new InputStreamReader(System.in));
String send = br.readLine();
//发送数据
dos.writeUTF(send);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if(dos != null){
dos.close();
}
if(br != null){
br.close();
}
if(client != null){
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
public static final String IP = "localhost";//服务器地址
public static final int PORT = 8000;//服务器端口号
public static void main(String[] args) {
handler();
}
private static void handler(){
try {
//实例化一个Socket,并指定服务器地址和端口
Socket client = new Socket(IP, PORT);
//开启两个线程,一个负责读,一个负责写
new Thread(new ReadHandlerThread(client)).start();
new Thread(new WriteHandlerThread(client)).start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
*处理读操作的线程
*/
class ReadHandlerThread implements Runnable{
private Socket client;
public ReadHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataInputStream dis = null;
try {
while(true){
//读取服务器端数据
dis = new DataInputStream(client.getInputStream());
String receive = dis.readUTF();
System.out.println("服务器端返回过来的是: " + receive);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(dis != null){
dis.close();
}
if(client != null){
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
* 处理写操作的线程
*/
class WriteHandlerThread implements Runnable{
private Socket client;
public WriteHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataOutputStream dos = null;
BufferedReader br = null;
try {
while(true){
//取得输出流
dos = new DataOutputStream(client.getOutputStream());
System.out.print("请输入: \t");
//键盘录入
br = new BufferedReader(new InputStreamReader(System.in));
String send = br.readLine();
//发送数据
dos.writeUTF(send);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try{
if(dos != null){
dos.close();
}
if(br != null){
br.close();
}
if(client != null){
client = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# socket双向通信
# java的socket通信
# java实现socket通信
# Java通过socket客户端保持连接服务端实现代码
# java客户端线上Apollo服务端的实现
# Java基于socket实现的客户端和服务端通信功能完整实例
# Java编程Socket实现多个客户端连接同一个服务端代码
# java实现socket客户端连接服务端
# 简单的java socket客户端和服务端示例
# java实现protocol传输的客户端和服务端的示例代码
# 客户端
# 服务端
# 请输入
# 的是
# 端口号
# 大家多多
# 完全相同
# final
# int
# PORT
# public
# Socket
# static
# Server
相关文章:
宝塔面板创建网站无法访问?如何快速排查修复?
如何设置并定期更换建站之星安全管理员密码?
建站主机选购指南与交易推荐:核心配置解析
建站之星安装后如何配置SEO及设计样式?
大同网页,大同瑞慈医院官网?
Swift中swift中的switch 语句
如何高效利用200m空间完成建站?
黑客入侵网站服务器的常见手法有哪些?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
,交易猫的商品怎么发布到网站上去?
如何在Ubuntu系统下快速搭建WordPress个人网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
香港服务器如何优化才能显著提升网站加载速度?
建站之星备案流程有哪些注意事项?
如何制作一个表白网站视频,关于勇敢表白的小标题?
开封网站制作公司,网络用语开封是什么意思?
C++中引用和指针有什么区别?(代码说明)
如何用低价快速搭建高质量网站?
音响网站制作视频教程,隆霸音响官方网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
再谈Python中的字符串与字符编码(推荐)
如何在橙子建站中快速调整背景颜色?
行程制作网站有哪些,第三方机票电子行程单怎么开?
网站制作公司排行榜,抖音怎样做个人官方网站
实现点击下箭头变上箭头来回切换的两种方法【推荐】
焦点电影公司作品,电影焦点结局是什么?
如何基于云服务器快速搭建个人网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
开心动漫网站制作软件下载,十分开心动画为何停播?
金*站制作公司有哪些,金华教育集团官网?
香港服务器部署网站为何提示未备案?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
建站主机CVM配置优化、SEO策略与性能提升指南
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
,制作一个手机app网站要多少钱?
如何通过建站之星自助学习解决操作问题?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何快速搭建FTP站点实现文件共享?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何用花生壳三步快速搭建专属网站?
建站之星3.0如何解决常见操作问题?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
建站主机数据库如何配置才能提升网站性能?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
建站之星24小时客服电话如何获取?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何快速完成中国万网建站详细流程?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
*请认真填写需求信息,我们会在24小时内与您取得联系。