client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server

URL:协议+IP+端口+资源位置

客户端:

  1. InetAddress 获取本地IP:写入服务器的端口号:xxxx
  2. 创建一个Socket连接(丢入IP和端口)
  3. 发送消息IO流(socket.getOutputStream();)
  4. 关闭

服务器:

  1. 服务端的建立一个端口:ServerSocket
  2. 监听客户端发过来的信息:serverSocket.accept();
  3. 读取客户端的信息(信息对于服务器管道是写入-就是输入流):accept.getInputStream();
  4. 管道流获取数据处理
  5. 关闭

客户端:代码实现

 1 package Demo1.JavaSe.javasocket;
2
3 import java.io.IOException;
4 import java.io.OutputStream;
5 import java.net.InetAddress;
6 import java.net.Socket;
7 import java.net.UnknownHostException;
8
9 //Socket编程客户端
10 public class JavaSocketClientG {
11 public static void main(String[] args) throws IOException {
12 Socket socket = null;
13 InetAddress ServerIP=null;
14 OutputStream outputStream=null;
15 try {
16 //1.要知道服务器端口号
17 ServerIP = InetAddress.getByName("127.0.0.1");
18 //端口号
19 int port = 9999;
20 //2.创建一个Socket连接
21 socket = new Socket(ServerIP, port);
22 //3.发送消息IO流
23 //client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server
24 outputStream = socket.getOutputStream();
25 outputStream.write("你好,我发送信息过来了!!!".getBytes());
26
27
28 } catch (UnknownHostException e) {
29 e.printStackTrace();
30 } catch (IOException e) {
31 e.printStackTrace();
32 }finally {
33
34 if (outputStream != null) {
35 outputStream.close();
36 }
37 if (socket != null) {
38 socket.close();
39 }
40 }
41
42
43 }
44 }

服务器:代码实现

package Demo1.JavaSe.javasocket;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; //Socket编程服务端
public class JavaServiceSocketG {
//Ctrl+Alt+L 格式化代码 public static void main(String[] args) {
//alt +enter 补全/提示
// Ctrl+Alt+O 优化导入的类和包
//ctrl+alt+t 选中,自动选择try-catch
ServerSocket serverSocket=null;
Socket accept=null;
InputStream inputStream=null;
ByteArrayOutputStream byteArrayOutputStream=null;
try {
//client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server
//1.服务端的有一个端口
serverSocket= new ServerSocket(9999);
//2.监听客户端发过来的信息
accept= serverSocket.accept();
//3.读取客户端的信息(信息对于服务器管道是写入-就是输入流)
inputStream= accept.getInputStream();
//4.管道流获取数据处理
byteArrayOutputStream= new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len= inputStream.read(buffer))!=-1){
byteArrayOutputStream.write(buffer,0,len);
}
System.out.println(byteArrayOutputStream.toString()); } catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(serverSocket!=null){
serverSocket.close();
}
if (accept!=null){
accept.close();
}
if (inputStream!=null){
inputStream.close();
}
if (byteArrayOutputStream!=null){
byteArrayOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} }

运行结果:

Java网络编程:Socket 通信的更多相关文章

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

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

  2. Java网络编程Socket通信

        TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议     UDP (User Datagram Proto ...

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

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

  4. java网络编程socket解析

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

  5. Java网络编程——Socket

    网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...

  6. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

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

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

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

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

  9. UNIX网络编程——Socket通信原理和实践

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  10. java网络编程——socket实现简单的CS会话

    还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...

随机推荐

  1. C#,使用NPOI,导出excel文件

    /// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...

  2. Java 快速开发几 MB 独立 EXE,写图形界面很方便

    Java 写的桌面软件带上运行时只有 6 MB,而且还是独立 EXE 文 件,是不是难以置信? 想一想 Electron 没写多少功能就可能超过百 MB 的体积,Java 写的桌面软件算不算得上小.轻 ...

  3. Elasticsearch:反向代理及负载均衡在 Elasticsearch 中的应用

    文章转载自:https://elasticstack.blog.csdn.net/article/details/108365746

  4. 修改因python是3版本导致的yum问题

    问题原因: 系统自带的python出来的是2版本,但是因为某些原因,比如安装使用ElartAlert,导致执行python出来的是3版本. 此时执行yum相关的命令,会报错,具体错误信息如下: [ro ...

  5. 【面试题】Vue2动态添加路由 router.addRoute()

    Vue2动态添加路由 点击打开视频讲解更加详细 场景: 一般结合VueX和localstorage一起使用 router.addRoutes vue-router4后 已废弃:使用 router.ad ...

  6. a除于b

    a=eval(input()) b=eval(input()) if b!=0: print("{}".format(round(a/b,2))) else: print(&quo ...

  7. C++ 自学笔记 new和delete(动态内存分配)

    动态内存分配 Dynamic memoey allocation C++使用new和delete 来申请和释放内存 new:先申请一个空间 int\Stash : 默认构造函数初始化对象 ~:析构函数 ...

  8. CentOS 7.9 安装 redis-6.2.0

    一.CentOS 7.9 安装 redis-6.2.0 1 下载地址:https://download.redis.io/releases/redis-6.2.0.tar.gz 2 安装gcc来进行编 ...

  9. C++面向对象编程之C++11语法糖

    1.variadic template(模板参数可变化) template... type就是说有可变模板参数,作为参数使用时类型就是 类型后 + ... ,例如type... / type& ...

  10. Mysql通过Canal同步Elasticsearch

    目录 版本管理 Mysql 设置 在MySQL配置文件my.cnf设置: 检查是否开启 增加新用户: 安装 Elasticsearch es 跨域问题 目录挂载 安装 Elasticsearch-He ...