[Java][网络编程]服务端向客户端发送信息

/*前置知识(服务端)1.首先要常见一个ServerSocket对象 服务端套接字,并且在服务端套接字里面确定需要使用的端口2.然后要创建一个Socket对象来接收ServerSocket的返回值。通常一个Socket对象对应一个客户端/涉及到多个客户端需要通过线程来解决3.现在客户端和服务端已经通过socket链接了,然后就需要创建一个InputStream的输入流来获取socket所对应客户端的流入内容4.然后很关键的一点:需要创建一个ByteArrayOutPutStream这样的 字符数组的输出流来在控制台输出内容5.创建一个缓冲的字节数组Byte[] 然后给定它的大小 比如10246.现在我们进入循环读取客户端传进流的信息的时候了,因此需要调用接收传入流的ips中的read方法7.然后将读取到的内容放入到Byte[]数组中,然后通过ByteArrayOutputStream的write方法将Byte[]数组输出在控制台8.因为客户端输入的信息一般都是字符串 因此我们需要把baos这个ByteArrayOutputStream转换成String9.我们得把创建对象 和把对对象赋值的部分都留在try-with-resources结构里面 这样可以避免手动关闭对象对资源的占用*/
/*
前置知识(客户端):
1.还是先把try-with-resources结构摆出来
2.因为我们是客户端,希望输出内容,我们就得先和服务端链接
3.我们创建一个Socket套接字,先给本地安排一个地址,然后端口得和服务端对上
比如我们是服务端ip为127.0.0.1 端口为8090 我们就得把这个套接字对准8090和127.0.0.1
4.接下来我们依然是要和服务端一样依托io流来完成信息的传递
比如我们依然需要创建一个OutputStream对象,然后让这个对象和Socket发生关联 比如getOutputStream这个方法
5.我们在OutputStream这个对象和Socket产生关联之后 就可以调用OutputStream来调用write方法来输出文字了
6.我们要切记:我们只能在此输入字节类型的文件 因此需要调用getByte().*/
/*前置知识(客户端):1.还是先把try-with-resources结构摆出来2.因为我们是客户端,希望输出内容,我们就得先和服务端链接3.我们创建一个Socket套接字,先给本地安排一个地址,然后端口得和服务端对上比如我们是服务端ip为127.0.0.1 端口为8090 我们就得把这个套接字对准8090和127.0.0.14.接下来我们依然是要和服务端一样依托io流来完成信息的传递比如我们依然需要创建一个OutputStream对象,然后让这个对象和Socket发生关联 比如getOutputStream这个方法5.我们在OutputStream这个对象和Socket产生关联之后 就可以调用OutputStream来调用write方法来输出文字了6.我们要切记:我们只能在此输入字节类型的文件 因此需要调用getByte().*/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TCPClient {public static void main(String[] args) {String serverHost = "127.0.0.1";int serverPort = 8888;try {// 创建socket连接服务器Socket socket = new Socket(serverHost, serverPort);// 获取输入输出流BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);while (true) {// 从控制台读取用户输入的消息System.out.print("请输入要发送的消息:");String message = reader.readLine();// 发送消息到服务器writer.println(message);// 如果输入的消息为"bye",则退出循环if (message.equals("bye")) {break;}// 从服务器接收消息BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String serverMessage = serverReader.readLine();System.out.println("服务器返回的消息: " + serverMessage);}// 关闭连接socket.close();} catch (IOException e) {e.printStackTrace();}}}
/*前置知识(服务端)1.首先要常见一个ServerSocket对象 服务端套接字,并且在服务端套接字里面确定需要使用的端口2.然后要创建一个Socket对象来接收ServerSocket的返回值。通常一个Socket对象对应一个客户端/涉及到多个客户端需要通过线程来解决3.现在客户端和服务端已经通过socket链接了,然后就需要创建一个InputStream的输入流来获取socket所对应客户端的流入内容4.然后很关键的一点:需要创建一个ByteArrayOutPutStream这样的 字符数组的输出流来在控制台输出内容5.创建一个缓冲的字节数组Byte[] 然后给定它的大小 比如10246.现在我们进入循环读取客户端传进流的信息的时候了,因此需要调用接收传入流的ips中的read方法7.然后将读取到的内容放入到Byte[]数组中,然后通过ByteArrayOutputStream的write方法将Byte[]数组输出在控制台8.因为客户端输入的信息一般都是字符串 因此我们需要把baos这个ByteArrayOutputStream转换成String9.我们得把创建对象 和把对对象赋值的部分都留在try-with-resources结构里面 这样可以避免手动关闭对象对资源的占用*/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {public static void main(String[] args) {int serverPort = 8888;try {// 创建ServerSocket监听指定端口ServerSocket serverSocket = new ServerSocket(serverPort);System.out.println("等待客户端连接...");// 等待客户端连接Socket clientSocket = serverSocket.accept();System.out.println("客户端连接成功!");// 获取输入输出流BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);while (true) {// 接收客户端发送的消息String clientMessage = reader.readLine();// 如果客户端发送的消息为"bye",则退出循环if (clientMessage.equals("bye")) {break;}System.out.println("接收到的消息: " + clientMessage);// 发送消息给客户端writer.println("已接收到消息:" + clientMessage);}// 关闭连接clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/451575.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/451575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】如何判断一个字符串为空

#方法一 if oneString: print "not empty" else: print "empty" #方法二 if oneString "": print "empty" else: print "not empty"

LRU 实现缓存

LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap实现 inheritance实现方式 继承map类 可以使用Collections.synchronizedMap方式实现线程安全的操作 public class LruCache<K,V> extends LinkedHashMap<K,V> {private final int MAX_CACHE_SIZE;public …

使用vsftp作为集群的yum仓库

地址规划&#xff1a;vsftp服务器的地址为172.16.1.61使用的环境&#xff1a;[rootnfs01 scripts]# uname -a Linux nfs01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux首先在yum服务器上挂载本地光盘mkdir /media/cdrom ;mount…

纯做技术是自娱自乐 抛开技术做技术才是出路

短短一生不过数十载&#xff0c;对于很多人而言&#xff0c;作IT、作技术只是生命中的某一段&#xff0c;并非所有。而无论是换工作还是换行业&#xff0c;只是一种形式而已&#xff0c;最终我们追求的是成功、是荣誉、是收获。于是在年轻的这几年里&#xff0c;作为技术人员理…

TOAD连接Oracle数据库失败:OCI_INVALID_HANDLE解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. toad 连接Oracle数据库连接失败如图&#xff1a; 2. 导致这个情况的前因&#xff1a;toad运行情况下&#xff0c;突然断电。 3. 解决…

多线程三大特性:原子性、有序性、可见性

参考文献&#xff1a;三大性质总结&#xff1a;原子性&#xff0c;有序性&#xff0c;可见性 感谢作者分享&#xff01;

git checkout 和 git reset

git checkout 主要有三个作用&#xff1a; 第一个就是切换分支。例如你从远程仓库clone下来所有的源代码&#xff0c;你git branch一下会看到你通常是在master&#xff0c;如果你想切换到某一个分支上呢&#xff1f;git checkout <branchname>第二个就是放弃对某个文件的…

python-访问者模式

源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明&#xff1a; 访问者模式的基本想法是&#xff0c;软件系统中拥有一个由许多对象构成的、比较稳定的对象结构&#xff0c;这些对象的类都拥有一个 accept 方法用来接受访问者对象的访问。访问者是一个接口&am…

面试题:Fibonacci数列

题目描述&#xff1a;大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项&#xff08;从0开始&#xff0c;第0项为0&#xff09;。 方法1&#xff1a;递归 public class Solution {public int Fibonacci(int n) {if (n 0){retu…

“行到水穷处,坐看云起时.“

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 自由自在&#xff0c;随意而行&#xff0c; 只沿着流水向上&#xff0c;不知不觉的就走到了泉眼尽头&#xff0c; 无路可走的时候 &…

git commit -m和git commit -am

字面解释的话&#xff0c;git commit -m用于提交暂存区的文件&#xff1b;git commit -am用于提交跟踪过的文件 要理解它们的区别&#xff0c;首先要明白git的文件状态变化周期&#xff0c;如下图所示 工作目录下面的所有文件都不外乎这两种状态&#xff1a;已跟踪或未跟踪。已…

磁盘结构简介

这里讲的主要是网上所谓的老式磁盘&#xff0c;它是由一个个盘片组成的&#xff0c;我们先从个盘片结构讲起。如图1所示&#xff0c;图中的一圈圈灰色同心圆为一条条磁道&#xff0c;从圆心向外画直线&#xff0c;可以将磁道划分为若干个弧段&#xff0c;每个磁道上一个弧段被称…

java中的对象监视器

参考文章&#xff1a;监视器–JAVA同步基本概念 感谢作者分享&#xff01;

Yii1.1 CGridView 简单使用

Yii1.1 CGridView 简单使用 配置model文件&#xff0c;返回CActiveDataProvider对象。public function search() {$criterianew CDbCriteria;$criteria->compare(title,$this->title,true);$criteria->compare(type,$this->type);$criteria->compare(addr,$this…

3个著名加密算法(MD5、RSA、DES)的解析

MD5的全称是Message-Digest Algorithm 5&#xff0c;在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明&#xff0c;经MD2、MD3和MD4发展而来。 MD5将任意长度的“字节串”变换成一个128bit的大整数&#xff0c;并且它是一个不可逆的字符串变换算法&#x…

想念我的大大的石

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 // ------- 甘愿用我的一生去追寻 ... 想念我的大石头&#xff1a; 想念会默默陪着我&#xff0c;一直从烈日咫尺坐到黄昏浸透蔓蔓云层…

Java 中的悲观锁、乐观锁、自旋锁、适应性自旋锁、偏向锁、轻量级锁、重量级锁、公平锁、非公平锁、可重入锁、共享锁等

参考文献&#xff1a; 不可不说的Java“锁”事 java并发进阶 感谢美团技术团队&#xff01; 感谢JavaGuide&#xff01;

Git 的origin和master解析

首先要明确一点&#xff0c;对git的操作是围绕3个大的步骤来展开的&#xff08;其实几乎所有的SCM都是这样&#xff09; 1. 从git取数据&#xff08;git clone&#xff09; 2. 改动代码 3. 将改动传回git&#xff08;git push&#xff09; 这3个步骤又涉及到两个re…

end to end testing

概念 https://www.softwaretestinghelp.com/what-is-end-to-end-testing/ What is “End to End Testing”? Term “End to End testing” is defined as a testing method which determines whether the performance of an application is as per the requirement or not. It…

windows下安装mysql 开机启动

1 下载地址 http://dev.mysql.com/downloads/installer/ 2 下载版本 mysql community server 5.7.x 这个版本是一个傻瓜版本&#xff0c;设置root密码之后就可以启动服务了&#xff0c;不用自己配置&#xff0c;还有workbench可用。转载于:https://www.cnblogs.com/hustdc/p/91…