Java Socket编程服务器响应客户端实例代码
作者:SuPhoebe 发布时间:2023-08-09 03:25:51
标签:java,socket编程实例
通过输入流来读取客户端信息,相应的时候通过输出流来实现。
服务端类的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author whn6325689
*/
public class server {
//服务器端
public static void main(String[] args) {
try {
//1.创建一个服务器端Socket,即serverSocket,指定绑定的端口,并监听此端口。
ServerSocket serverSocket=new ServerSocket(8888);
//2.调用serverSocket的accept()方法,等待客户端的连接
System.out.println("==服务器即将启动,等待客户端的连接==");
Socket socket=serverSocket.accept();
//3.获取输入流用来读取客户端所发出的登录信息
InputStream is=socket.getInputStream();
//字节输入流
InputStreamReader isr=new InputStreamReader(is);
//将字节流转化为字符流
//为字符流添加缓冲
BufferedReader bufferedReader=new BufferedReader(isr);
String info=null;
//循环读取客户端提交的信息
while((info=bufferedReader.readLine())!=null){
System.out.println("我是服务器,客户端提交的信息是:"+info);
}
socket.shutdownInput();
//4.获取输出流,响应客户端的请求
OutputStream os= socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//转化为打印流
pw.write("欢迎您!");
pw.flush();
//刷新缓存
//5.关闭相关的资源
bufferedReader.close();
is.close();
isr.close();
socket.close();
serverSocket.close();
os.close();
pw.close();
}
catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
客户端类的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author whn6325689
*/
public class client {
//客户端
public static void main(String[] args) {
try {
//1.创建客户端Socket,指定服务器地址和端口号
Socket socket=new Socket("127.0.0.1", 8888);
//2.获取输出流,用来向服务器发送信息
OutputStream os=socket.getOutputStream();
//字节输出流
//转换为打印流
PrintWriter pw=new PrintWriter(os);
pw.write("用户名:admin;密码:admin");
pw.flush();
//刷新缓存,向服务器端输出信息
//关闭输出流
socket.shutdownOutput();
//3.获取输入流,用来读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务器端返回的信息是:"+info);
}
//4.关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();
}
catch (IOException ex) {
Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
先运行服务器端类,之后再运行客户端类:
服务器端类输出结果:
==服务器即将启动,等待客户端的连接==
我是服务器,客户端提交的信息是:用户名:admin;密码:admin
客户端类的输出结果:
我是客户端,服务器端返回的信息是:欢迎您!
总结
Java编程Socket实现多个客户端连接同一个服务端代码
Java多线程编程实现socket通信示例代码
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
来源:http://blog.csdn.net/u013007900/article/details/50411477


猜你喜欢
- 序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程。对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过
- Android日期选择控件效果如下:调用的代码:@OnClick(R.id.btn0) public void btn0() { final
- 这是进行Java Web开发必备的一个过程,仅供新手参考,高手可以忽略!JDK 和 JRE 的区别JRE(Java Runtime Envi
- Android 实现tab视图有2种方法,一种是在布局页面中定义<tabhost>标签,另一种就是继承tabactivity.但
- 位操作符是对数据按二进制位进行运算的操作符。位操作是其他很多语言都支持的操作,如C、C++和Java等,C#也不例外支持位操作。注意位操作支
- ListView如何实现简单列表,供大家参考,具体内容如下效果图:啥也没干的ListView张这样:fry.Activity01packag
- 前言当系统的并发比较高的时候,日志的处理输出也是一种性能的开销负担,所以,选择一个中间件来处理消费日志必不可少!下面是spring boot
- 项目结构这个是在网上找的资源,出处记不得了,记录一下。程序的总体结构,很简单的:核心代码代码如下:ArrComparator.java类im
- 在工作中要求将图片上传至本地,如下代码将介绍如何将图片上传至本地准备工作:环境:eclipse4.5-x64,jdk1.7-x64,mave
- 在 Spring 中,有以下三种方式来创建数据源:通过 JNDI 获取应用服务器中的数据源;在 Spring 容器中配置数据源;通过代码来创
- 直接贴上代码,里面都有注释/// <summary> &n
- 在项目中如果涉及到用Excel开发的报表模版来导出报表数据的话,一般都是在Excel报表中使用VBA做成宏来进行调用。即先使用Excel自带
- 控制器Controller控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个
- 前段时间,同事在代码中KW扫描的时候出现这样一条:上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作
- 综述Android中的事件分发机制也就是View与ViewGroup的对事件的分发与处理。在ViewGroup的内部包含了许多View,而V
- 最近由于项目开发使用到了动态布局,因为打包sdk ,sdk 这块activity 需要一些layout 文件 。而做过sdk 开发的小伙伴应
- 本篇文章所涉及到的demo练习 使用的cloud 2021.0.3+ springboot2.6.8一、概述简介官网:https://doc
- 在前后端分离的项目中后端返回的格式一定要友好,不然会对前端的开发人员带来很多的工作量。那么SpringBoot如何做到统一的后端返回格式呢?
- 一、日志1、配置日志级别日志记录器(Logger)的行为是分等级的。如下表所示:分为:OFF、FATAL、ERROR、WARN、INFO、D
- 在.NET 4.0(当然也包括4.0以前的版本)下,用反射判断某个方法是否运用了自定义Attribute时,可以通过调用MethodInfo