上一节实现了client像server端发送请求。本节将实现server端向client回传信息。实现原理非常easy,在原来的基础上。在server端实现输出流,在client实现输入流就可以,详细代码例如以下:

server端:

package com.socket.demo;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
public static void main(String[] args) {
try{
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("----------------服务端执行。開始监听请求----------------");
Socket socket=serverSocket.accept();//開始监听
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
//获取请求内容
String info;
while ((info=bufferedReader.readLine())!=null) {
System.out.println("我是server端。client请求为:"+info); } socket.shutdownInput();
//server端向client回传信息
OutputStream outputStream=socket.getOutputStream();
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("client您好。我已经接受到你的信息");
printWriter.flush();
//关闭资源
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStream.close();
socket.close();
serverSocket.close();
}catch(Exception exception){ } } }

client:

package com.socket.demo;

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.net.UnknownHostException; public class Client {
public static void main(String[] args) {
try {
//发送到8888端口
Socket socket=new Socket("127.0.0.1", 8888);
//输出流
OutputStream outputStream=socket.getOutputStream();
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("server端你好,我是client。 ");
printWriter.flush();
socket.shutdownOutput();//这个不能少。! ! ! !!!。!!。! ! !
//接受server端回传的信息
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String info;
while ((info=bufferedReader.readLine())!=null) {
System.out.println("我是client。server端返回::"+info); }
//关闭资源
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }

执行实比例如以下:

server控制台输出:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8YAAAD7CAYAAAConY0vAAAgAElEQVR4AeydCXgV1dnH/zd72MMiCiIguQEioHWF4L603qA2Lo3aVvk+rYlaNaFtauvnUit1o19JWqsNalvQVsW2xk+5V2vdKptW6wLGmhsFREVEdgjZ53veM8udmTt3SUhCIP/7PMmcOct73vM7586dd95zzvjWfd6gwfY57JBs66ypqckK94bA7t27o9Tw+XxWXHt7O+QvJSVF/VkJtoCmOZprS2GQBEiABEiABEiABEiABEigNxGQe333Pb7Eef01NDQgIyNjr9XPysrqsIzMzEyrzCcb9lhhCdjtqy+//NKRJifSFtNGSU9PR2pqKtra2tDS0hKVVyLS0tKwePFizDrnXHy1aTP27GmEprVH5e3fvz+ys3Xbbs+ePTHDXjaWCGtv15Qew4bn4PWVK3DBBRdE1dEbIoSfMBEbUMZKa2ur5/iQfDJGRowYYalt76s0K/YACMQziA+A5rEJJEACJEACJEACJEACJNDnCPSle3wxhmMZxO6Ob25qxo4dO9He3oZ2D+df4944OTUoY10Mdq092uh267Kvz8UY3tvPfmUYy5dibz/ypIAfEiABEiABEiABEiABEiCB/ZOA3M/b//anVog3uDMf06MsZcUmGj58OLZs2YwhQwYrr66Xx7gz9XiV2b27AeIR7wpbzEt+d8TZx0ey9l+UYSzuZLu7vzsU7azMrugM+6DqrB4sRwIkQAIkQAIkQAIkQAIk0LUEkjVgpFbT8DHDXatJ56XZp+aaUuz2lZc9I23piI0i+XNzc7FmzRps27bNrKbbjjI9feTIkYp5t1WSpOCuHCPuvooyjJPUaZ9k64o1zx0ZdPukkayUBEiABEiABEiABEiABPoggY4YPfsrnq6Y8ittHz16tPrrSQ7Nzc0dMuC7Q7fuHCM+9+ZbZgN6q9fY1I9HEiABEiABEiABEiABEiABEugtBNweSLdetK/cRPbduVdfxVy065V536nOmkmABEiABEiABEiABEiABEigdxJIxnZKJk/vbN2BpVWsfojpMbY3n0837DQYJgESIAESIAESIAESIAESIAEglpGViA3tq0SEuj49UV8lZRh3vVqUSAIkQAIkQAIkQAIkQAIkQAIkQAK9g0DMqdS9Qz1qQQIkQAIkQAIkQAIkQAIkQAIkQALdS4CGcffypXQSIAESIAESIAESIAESIAESIIFeToCGcS/vIKpHAiRAAiRAAiRAAiRAAiRAAiTQvQSSeo/x+7W13asFpZMACZAACZAACZAACZAACZAACZBANxE4Ij8/ruS4hrFpEB/qz40rhIkkQAIHJoGphw1G6MW3VOMCZxxzYDayF7TKZMxrbS/oDKpAAiRAAiRAAiRwQBIwbdtYBnLMXamlIG/SDsgxwUaRQFIETKOYBnFSuLokkxjIvO52CUoKIQESIAESIAESIAFPAp+G6+FlHHsaxjSKPRkykgT6FAG5aNAo7vkup3Hc88xZIwmQAAnsjwRee/nvWPHay9j81aa9Vn/Y8BGYcdJpOOm0rytZ3Sl7r5WlABLoAgJexnHcqdRdUCdFkAAJ7IcExFv8aXg/VJwqkwAJkAAJ7LcEFj54H66/YQ527GnZb9vQU4q/+uJzWPrS3zEpfwqOPGrvlzrt2rkDf3/2KbS3t6smdJfsU844W8lnX/fUSGE9HSEQZRiLt3h0bi40rSNimJcESOBAIiBeS3qL902PCnfhL9dhfkiABA48Aj7fgdGmrZs34qVn/4yWpkacErgEh4wZbzVsTd1qLPvHUxg0ZBjO/OZ30a//ICutKwKNdb8GYnHU2pEx9rtIyRzeFVV1qYx4evtSMpB+6EVJ673ytVeQP3Uahg4/CAMGRvhqmgatvR3tmobU1FT4khxwBx0yWrVV5Mqnu2SbhnGXgqUwRaC9cRNSskaQhotALJtW7rPE7rVPqY4yjF2y1OmqF2/

posted on
2017-07-27 19:30 
cynchanpin 
阅读(...) 
评论(...) 
编辑 
收藏

上机题目(0基础)- Java网络操作-Socket实现client和server端通信二(Java)的更多相关文章

  1. 上机题目(0基础)- Java网络操作-Socket实现client和server端通信(Java)

    非常多刚開始学习的人对于java网络通信不太熟悉.对相关概念也不太明确,这里我们主要实现一下socket通信,socket通信在java中应用十分广泛.比如QQ和MSN等都是基于socket通信的,什 ...

  2. Socket实现client和server端通信(Java)(转)

    转自: https://blog.csdn.net/yayun0516/article/details/50819147 https://www.jianshu.com/p/2d4f223f1462 ...

  3. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  4. 上机题目(0基础)- Java网络操作-打印网页(Java)

    打印一个网页,熟悉Java网络编程: import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  5. java网络编程socket解析

    转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...

  6. java网络编程Socket通信详解

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  7. java 网络编程Socket

    TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...

  8. JAVA网络编程Socket常见问题 【长连接专题】

    一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...

  9. day05 Java网络编程socket 与多线程

    java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...

随机推荐

  1. Hexo NexT主题添加点击爱心效果

    给NexT主题内添加页面点击出现爱心的效果 创建js文件 在/themes/next/source/js/src下新建文件clicklove.js,接着把该链接下的代码拷贝粘贴到clicklove.j ...

  2. GCD 开发详情

    目录 一.简介 二.dispatch Queue - 队列 三.dispatch Groups - 组 四.dispatch Semaphores - 信号量 五.dispatch Barriers ...

  3. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  4. vue数组对象修改触发视图更新

    直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array. ...

  5. 【CZY选讲·一道图论好题】

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,不仅有边权还有点权.LYK给出了一个子图的定义,一张图G'={V',E'}被称作G的子图,当且仅当: · ...

  6. 使用fdisk命令对linux硬盘进行操作

    fdisk是linux自带的硬盘分区工具,可以对硬盘进行分区,或者对硬盘分区进行调整.本次试验环境请参考[Linux磁盘系统基础知识] 首先选择要进行操作的磁盘 [root@a ~]# fdisk / ...

  7. Spring整合hibernate4:事务管理

    Spring整合hibernate4:事务管理 Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTran ...

  8. 联合权值(NOIP2014)奇特的模拟。。

    原题传送门 这道题瞄了一眼还以为是SPFA最短路. 后面发现距离为2.. 好像可以枚举中间点来着? 时间效率O(n*(2n-2))≍O(n^2) BOOM!(PS:9018上过了,说明数据太水了..) ...

  9. 5.OpenStack添加镜像服务

    添加镜像服务 这里是安装在控制器上 创建数据库 mysql -uroot -ptoyo123 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glanc ...

  10. 你不一定知道的、并没有什么卵用的一些python库

    1. delorean,用来处理时间的库 import datetime import pytz # 一般情况下,我们想表示时间的话 est = pytz.timezone("Asia/Sh ...