客户端类:Socket类


  • TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器的数据,两次IO流

  • java.lang.Object

    继承者 java.net.Socket

  • 构造方法:

    1. Socket(String host, int port)

      创建一个流套接字并将其连接到指定主机上的指定端口号。

      参数:

      String host:服务器主机名/IP地址

      int port:服务器的端口号
  • 成员方法:

    1. OutputStream getOutputStream()

      返回此套接字的输出流。
    2. InputStream getInputStream()

      返回此套接字的输入流。
    3. void close()

      关闭套接字
  • 注意:

    1. 客户端和服务器端交互时,必须使用Socket中提供得网络流,不能使用自己创建的流对象
    2. 当我们创建客户端Socket对象时,就会使用TCP协议与服务器建立连接通路,若服务器没有启动,就会抛出异常。

服务器类:ServerSocket类


  • TCP通信的服务器端:接受客户端的请求,读取客户端发送的数据,给客户端回写数据,两次IO流,一直处于等待状态

  • java.lang.Object

    继承者 java.net.ServerSocket

  • 构造方法:

    1. ServerSocket(int port)

      创建绑定到特定端口的服务器套接字,不设置操作系统随机分配,无法通信。
  • 成员方法

    1. Socket accept()

      侦听并接受到此套接字的连接。
  • 注意: 服务器端必须明确一件事,必须知道是哪个客户端请求的服务器,所以可以使用accept()方法获取到请求的客户端对象Socket


package cn.learn.web;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class client {
public static void main(String[] args) throws IOException {
//1.创建客户端对象Socket,构造方法绑定服务器IP地址和端口号
Socket socket = new Socket("127.0.0.1",8020);
//2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
OutputStream outputStream = socket.getOutputStream();
//3.使用流中的write方法给服务器发送数据,需要转换成字节数组
outputStream.write("服务器你好".getBytes()); //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream clientIn = socket.getInputStream();
//5.使用InputStream对象中的read()方法,读取服务器回写的数据
byte[] bytes = new byte[1024];
int len =clientIn.read(bytes);
//打印看看
System.out.println(new String(bytes,0,len)); //6.释放资源,只关闭Socket的IO流就行
socket.close(); }
}

package cn.learn.web;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
public static void main(String[] args) throws IOException { //1.设置通信端口号,不然系统随机分配
ServerSocket server = new ServerSocket(8020); //2.使用serverSocket对象中的方法accept,获取到请求的客户端对象Socket(含地址和端口号)
Socket socket1 = server.accept(); //3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream serveIn = socket1.getInputStream(); //4.使用serveIn的方法read,读取客户端发送的数据
byte[] bytes = new byte[1024];
//获取读取的数据有效长度
int len = serveIn.read(bytes);
//打印看看
System.out.println(new String(bytes,0,len)); //5.使用Socket对象中的方法getOutputStream()获取网络字节输入流OutputStream对象
OutputStream serverOut = socket1.getOutputStream(); //6.使用serverOut中的write方法回写给客户端
serverOut.write("我收到了".getBytes()); //7.释放socket1与server的流
server.close();
socket1.close();
}
}

TCP通信 -C/S中的Socket与ServerSocket的更多相关文章

  1. tcp通信:多进程共享listen socket方式

    原文链接:http://blog.csdn.net/largetalk/article/details/7939080 看tornado源码多进程(process.py)那段,发现他的多进程模型和一般 ...

  2. 34、Android中基于Socket的网络通信(一)

    Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...

  3. 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...

  4. 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)

    基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...

  5. TCP/IP网络编程中socket的行为

    一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...

  6. 浅谈TCP/IP网络编程中socket的行为

    我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...

  7. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  8. C#使用ProtocolBuffer(ProtoBuf)进行Unity中的Socket通信

    首先来说一下本文中例子所要实现的功能: 基于ProtoBuf序列化对象 使用Socket实现时时通信 数据包的编码和解码 下面来看具体的步骤: 一.Unity中使用ProtoBuf 导入DLL到Uni ...

  9. socket实现udp与tcp通信-java

    1.简单介绍Socket Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信. 数 ...

随机推荐

  1. Leetcode之回溯法专题-77. 组合(Combinations)

    Leetcode之回溯法专题-77. 组合(Combinations)   给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输 ...

  2. SpringBoot_@valid_参数校验

    SpringBoot @valid 参数校验 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不 ...

  3. 防盗链测试01 - Jwplayer+Tengine2.3.1 mp4模块打造流媒体测试服务器

    最近有个想法,想做类似下面的视频URL验证: 1.URL Tag Validation 2.Special format of URL for preventing unauthorized usag ...

  4. JWT原理 使用(入门篇)

    1.JWT简介 JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换 使用起来就是,由 ...

  5. Badboy参数化 - Add Variable(循环使用不同的关键字进行搜索)

    参考: http://leafwf.blog.51cto.com/872759/1113716 http://www.51testing.com/html/00/130600-1367743.html ...

  6. P3469 [POI2008]BLO-Blockade 割点 tarjan

    题意 给定一个无向图,问删掉点i,图中相连的有序对数.(pair<x, y> , x != y);求每个点对应的答案 思路 首先我们可以发现,如果这个点不是割点,那么答案就是n-1,如果是 ...

  7. 牛客-小a的旅行计划 + 数学推导

    小a的旅行计划 题意: 小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为,同时小b也想出去游玩.由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选 ...

  8. CodeForces - 697C-Lorenzo Von Matterhorn(有点像LCA,原创

    传送门: CodeForces - 697C 原创--原创--原创 第一次自己A了一道感觉有点难度的题: 题意:在一个类似于二叉树的图上,1 : u ,v,w 表示从u到v的所以路都加上w的费用: 2 ...

  9. CSS特效集锦:视觉魔法的碰撞与融合(二)

    引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...

  10. 02 python 必知

    一.变量 1.变量的定义 将程序运算的中间结果临时存在内存里,以便后续代码调用. 2.变量的使用规范 1)变量必须要有数字,字母,下划线,任意组合. 2)变量不能数字开头. 3)不能是python中的 ...