TCP通信 -C/S中的Socket与ServerSocket
客户端类:Socket类
TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器的数据,两次IO流
java.lang.Object
继承者 java.net.Socket构造方法:
- Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
参数:
String host:服务器主机名/IP地址
int port:服务器的端口号
- Socket(String host, int port)
成员方法:
- OutputStream getOutputStream()
返回此套接字的输出流。 - InputStream getInputStream()
返回此套接字的输入流。 - void close()
关闭套接字
- OutputStream getOutputStream()
注意:
- 客户端和服务器端交互时,必须使用Socket中提供得网络流,不能使用自己创建的流对象
- 当我们创建客户端Socket对象时,就会使用TCP协议与服务器建立连接通路,若服务器没有启动,就会抛出异常。
服务器类:ServerSocket类
TCP通信的服务器端:接受客户端的请求,读取客户端发送的数据,给客户端回写数据,两次IO流,一直处于等待状态
java.lang.Object
继承者 java.net.ServerSocket构造方法:
- ServerSocket(int port)
创建绑定到特定端口的服务器套接字,不设置操作系统随机分配,无法通信。
- ServerSocket(int port)
成员方法
- Socket accept()
侦听并接受到此套接字的连接。
- 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的更多相关文章
- tcp通信:多进程共享listen socket方式
原文链接:http://blog.csdn.net/largetalk/article/details/7939080 看tornado源码多进程(process.py)那段,发现他的多进程模型和一般 ...
- 34、Android中基于Socket的网络通信(一)
Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...
- 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊
第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...
- 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...
- TCP/IP网络编程中socket的行为
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...
- C#使用ProtocolBuffer(ProtoBuf)进行Unity中的Socket通信
首先来说一下本文中例子所要实现的功能: 基于ProtoBuf序列化对象 使用Socket实现时时通信 数据包的编码和解码 下面来看具体的步骤: 一.Unity中使用ProtoBuf 导入DLL到Uni ...
- socket实现udp与tcp通信-java
1.简单介绍Socket Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信. 数 ...
随机推荐
- 集群、限流、缓存 BAT 大厂无非也就是这么做
前言 前阵子有网友询问,如何优化网站?这个问题真的很大,跟他简单的聊了一下,随便说了几点,觉得有必要整理一篇文章出来,正好前阵子在做爬虫博客,于是把大体思路分享出来,与大家互通有无,共同进步. 优化 ...
- MySQL之修改默认引擎和字符集
一.数据库引擎 1.1 查看数据库引擎 mysql> show engines; +--------------------+---------+------------------------ ...
- MACOS安装使用kafka
安装(会自动依赖安装zookeeper) brew install kafka 启动zookeeper cd /usr/local/Cellar/kafka/2.1.1/bin/ ./zookeepe ...
- 修改预制体效果无变化(unity&&CocosCreator)
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 1.问题 修改预制体后保存,预览游戏预制体未发生变化(和改之前效果一样) 2.回忆 以前做unity的时 ...
- 设计模式(C#)——07装饰者模式
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 在一款战斗类的游戏中,随着故事情节的发展,玩家(即游戏中的主角,下文统一为主角)通常会解锁一些新技能.最初主角只有使 ...
- egret之粒子系统
1.添加粒子库,放在项目同级目录下(必须!!必须!!) 2.添加路径: 3.添加代码: private creatParticle(_pname: string, _target, _x: numbe ...
- Salesforce LWC学习(五) LDS & Wire Service 实现和后台数据交互 & meta xml配置
之前的几节都是基于前台变量进行相关的操作和学习,我们在项目中不可避免的需要获取数据以及进行DML操作.之前的内容中也有提到wire注解,今天就详细的介绍一下对数据进行查询以及DML操作以及Wire S ...
- Delphi - Indy TIdThreadComponent 线程研究
Indy IdThreadComponent 线程研究 前几天在开发数据实时解析功能模块的时候,发现解析数据量巨大,特别耗时,程序一跑起来界面假死. 为了优化用户体验,采用了Indy 自带的IdThr ...
- HTTP首部字段完全解析
http协议是前端开发人员最常接触到的网络协议.在开发过程中,尤其是调试过程中避免不了需要去分析http请求的详细信息.在这其中头部字段提供的信息最多,比如通过响应状态码我们可以直观的看到响应的大致状 ...
- 步入vue.js世界
一.遇见vue.js 1.1 Vue.js是什么? Vue.js 是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.Vue.js通过简单的 ...