TCP通信的客户端代码实现和TCP通信的服务器代码实现
TCP通信的客户端代码实现
package com.yang.Test.ServerStudy;
import java.io.*;
import java.net.Socket;
/**
* TCP通信的客户端:向服务器发送链接请求,给服务器发送数据,解决服务器的回写的数据
* 表示客户端的类:
* java.net.Socket:此类实现了客户端套接字(也可以就叫“套接字”。套接字是两台机器间通信的端点)。
* 套接字:包含了IP地址和端口号的网络单位
*
* 构造方法:
* Socket(String host, int port);创建一个流套接字并将其链接到指定主机上的指定端口号
* 参数:
* String host:服务器主机的名称/服务器的IP地址
* int port:服务器的端口号
*
* 成员方法:
* OutputStream getOutputStream();返回此套接字的输出流
* InputStream getInputStream();返回次套接字的输入流
* void close();关闭此套接字
*
* 实现步骤:
* 1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
* 2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
* 3.使用网络字节OutputStream()对象中的方法write,给服务器发送数据
* 4.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象
* 5.使用网络字节输入流InputStream对象中的方法read,读取服务器会写的数据
* 6.释放资源(Socket)
*
* 注意:
* 1.客户端和服务端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
* 2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3此握手建立连接通路
* 这是如果服务器没有启动,那么就会抛出异常
* 如果服务器已经启动,那么就可以进行交互了
*
*/
public class TCPStudyClient {
public static void main(String[] args) throws IOException {
//1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
Socket socket = new Socket("127.0.0.1",1234);
//2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//3.使用网络字节OutputStream()对象中的方法write,给服务器发送数据
bw.write("你好服务器");
//4.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//5.使用网络字节输入流InputStream对象中的方法read,读取服务器会写的数据
String readLine = br.readLine();
System.out.println("接受->"+readLine);
//6.释放资源(Socket)
socket.close();
}
}
TCP通信的服务器代码实现
package com.yang.Test.ServerStudy;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP通信的服务器端:接受客户端的请求,读取客户端发送的数据,给客户端会写数据
* 表示服务器的类:
* java.net.ServerSocket:此类实现服务端套接字
*
* 构造方法:
* ServerSocket(int port);创建绑定到特定的端口的服务器套接字
*
* 服务器必须明确一件事情,必须知道哪个客户端请求的服务器
* 所以可以使用accrpt方法获取请求的客户端对象Socket
* 成员方法:
* Socket accept()监听并接受到此台阶自的链接
*服务器的实现步骤:
* 1.创建服务器ServerSocket对象和系统要指定的端口号
* 2.使用ServerSocket对象中的方法accept获取大炮请求的客户端对象Socket
* 3.使用Socket对象中的方法getInputStream获取网络字节输入流InputStream对象
* 4.使用网络季节输入流InputStream对象中的方法read读取客户端发送的数据
* 5.使用Socket对象中的方法getOutputStream获取网络字节输出流OutputStream对象
* 6.使用网络字节输出流OutputStream对象中的方法write给客户端回写数据
* 7.释放资源(Socket,ServerSocket)
*/
public class TCPStudyServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(1234);
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String readLine = br.readLine();
System.out.println("客户端发送来的数据:"+readLine);
bw.write("好的谢谢你");
bw.flush();
br.close();
bw.close();
socket.close();
serverSocket.close();
}
}
运行结果:
服务端:
客户端:
TCP通信的客户端代码实现和TCP通信的服务器代码实现的更多相关文章
- 分享下使用 svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验
分享下使用 svn,测试服务器代码自动更新.线上服务器代码手动更新的配置经验 利用SVN的POST-COMMIT钩子自动部署代码 Linux SVN 命令详解 Linux SVN 命令详解2 使用sv ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- 网络编程之Socket的TCP协议实现客户端与客户端之间的通信
我认为当你学完某个知识点后,最好是做一个实实在在的小案例.这样才能更好对知识的运用与掌握 如果你看了我前两篇关于socket通信原理的入门文章.我相信对于做出我这个小案列是完全没有问题的!! 既然是小 ...
- linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现
1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket ...
- Java实现TCP之Echo客户端和服务端
Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- 网络编程TCP/IP实现客户端与客户端聊天
一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)
不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket ...
- 【TCP/IP网络编程】:04基于TCP的服务器端/客户端
摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...
随机推荐
- spring boot redis 写入异常
redis 的 key value 使用 json 序列化.反序列化时,写入的 bean 不能是 final 类型的类,否则无法解析
- 虚拟机:ESX
VMware ESXi 与ESX 产品之比较 VMware vSphere 5.0 以后版本,所有底层虚拟化产品都改为ESXi产品,本文主要比较了ESXi与ESX的各自特点,以便对大家是否要把现有 ...
- 好客租房53-context的使用
app组件要传递给child组件 该如何处理 更好的姿势 跨组件传递数据 Provider 用来提供数据 Consumer用来消费数据 1调用React.createContext() 创建provi ...
- 检查MySQL主从复制运行状态
脚本思路: 1.使用MySQL客户端命令"mysql"直接在命令行中运行MySQL指令"show slave status\G;"来查看MySQL主从复制状态信 ...
- 【Unity Shader】syntax error: unexpected token 'struct' at line x 错误解决办法
以下代码处出现了syntax error: unexpected token 'struct' at line 33的错误 struct a2v { float4 vertex_position : ...
- SpringBoot整合RabbitMQ实战附加死信交换机
前言 使用springboot,实现以下功能,有两个队列1.2,往里面发送消息,如果处理失败发生异常,可以重试3次,重试3次均失败,那么就将消息发送到死信队列进行统一处理,例如记录数据库.报警等 环境 ...
- 支持向量机SVM(一):基本概念、目标函数的推导
本文旨在介绍支持向量机(SVM)的基本概念并解释SVM中的一个关键问题: 为什么SVM目标函数中的函数间隔取1? 一.分类问题 给定N个分属两类的样本,给出一个决策边界使得边界一侧只含一种样本(如下图 ...
- C++ 之多态总结
前言 最近为了完成数据库系统的实验,又复习起了<C++ Primer>,上一次看这本巨著也是大二下的六月份,那时看面向对象程序编程这一章还云里雾里的,没有领会多态的奥妙,学完 Java 之 ...
- C语言学习之我见-strncat()可调整的字符串拼接函数
strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...
- 3D还原货拉拉女孩身亡真相,这一环值得反思!
货拉拉女孩跳车身亡的消息,让人惋惜又震惊.司机多次偏离原始路线,女孩最终选择跳车,结果不幸身亡. 货拉拉女孩跳车真相被3D还原 有人质疑平台监管不力,造成如此惨剧,有人吐槽企业压榨员工,司机绕路是不得 ...