TCP数据传输(三)

练习题2:客户端键盘录入,服务器输出到控制台

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public
class
ServerDemo {

public
static void
main(String[] args)
throws IOException {

// 创建服务器Socket对象

ServerSocketss = newServerSocket(22222);

// 监听客户端连接

Sockets = ss.accept();

// 包装通道内容的流

BufferedReaderbr = newBufferedReader(newInputStreamReader(

s.getInputStream()));

Stringline = null;

while ((line = br.readLine())!=
null){

System.out.println(line);

}

// br.close();

s.close();

// ss.close();

}

}

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

/*

* 客户端键盘录入,服务器输出到控制台

*/

public
class
ClientDemo {

public
static void
main(String[] args)
throws IOException {

// 创建客户端Socket对象

Sockets = newSocket("219.216.80.19", 22222);

// 键盘录入数据

BufferedReaderbr = newBufferedReader(newInputStreamReader(System.in));

// 把通道内的流给包装一下

BufferedWriterbw = newBufferedWriter(newOutputStreamWriter(

s.getOutputStream()));

Stringline = null;

while ((line = br.readLine())!=
null){

// 键盘录入数据要自定义结束标记

if ("886".equals(line)) {

break;

}

bw.write(line);

bw.newLine();

bw.flush();

}

// 释放资源

// bw.close();

// br.close();

s.close();

}

}

练习题3:客户端键盘录入,服务器输出文本文件

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public
class
ServerDemo {

public
static void
main(String[] args)
throws IOException {

// 创建服务器Socket对象

ServerSocketss = newServerSocket(23456);

// 监听客户端连接

Sockets = ss.accept();

// 封装通道内的数据

BufferedReaderbr = newBufferedReader(newInputStreamReader(

s.getInputStream()));

// 封装文本文件

BufferedWriterbw = newBufferedWriter(newFileWriter("a.txt"));

Stringline = null;

while ((line = br.readLine())!=
null){

bw.write(line);

bw.newLine();

bw.flush();

}

bw.close();

// br.close();

s.close();

// ss.close();

}

}

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

/*

* 客户端键盘录入,服务器输出文本文件

*/

public
class
ClientDemo {

public
static void
main(String[] args)
throws IOException {

// 创建客户端Socket对象

Sockets = newSocket("219.216.80.19", 23456);

// 封装键盘录入

BufferedReaderbr = newBufferedReader(newInputStreamReader(System.in));

// 封装通道内的数据

BufferedWriterbw = newBufferedWriter(newOutputStreamWriter(

s.getOutputStream()));

Stringline = null;

while ((line = br.readLine())!=
null){

if ("over".equals(line)) {

break;

}

bw.write(line);

bw.newLine();

bw.flush();

}

// bw.close();

// br.close();

s.close();

}

}

练习题3:客户端文本文件,服务器输出到控制台

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public
class
ServerDemo {

public
static void
main(String[] args)
throws IOException {

// 创建服务器Socket对象

ServerSocketss = newServerSocket(34567);

// 监听客户端连接

Sockets = ss.accept();

// 封装通道内的流

BufferedReaderbr = newBufferedReader(newInputStreamReader(

s.getInputStream()));

Stringline = null;

while ((line = br.readLine())!=
null){

System.out.println(line);

}

s.close();

}

}

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.net.Socket;

/*

* 客户端文本文件,服务器输出到控制台

*/

public
class
ClientDemo {

public
static void
main(String[] args)
throws IOException {

// 创建Socket对象

Sockets = newSocket("192.168.12.92", 34567);

// 封装文本文件

BufferedReaderbr = newBufferedReader(newFileReader(

"InetAddressDemo.java"));

// 封装通道内的流

BufferedWriterbw = newBufferedWriter(newOutputStreamWriter(

s.getOutputStream()));

Stringline = null;

while ((line = br.readLine())!=
null){

bw.write(line);

bw.newLine();

bw.flush();

}

br.close();

s.close();

}

}

时间: 2024-08-03 17:27:14

TCP数据传输(三)的相关文章

tcp的三次握手四次挥手

在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求,然后客户端主动 关 闭连接.两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到 网络的 另一端也需要时间,所以图中的箭头都是斜的.双方发送的段按时间顺序编号为1-10, 各段中的主 要信息在箭头上标出,例如段2的箭头上标着SYN, 8000(0), ACK 1001, <mss 1024>, 表示该段中 的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置 1,32位确

[TCP/IP]TCP的三次握手和四次挥手

概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 1.TCP连接建立--三次握手 几个概念: seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在 一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用的 ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送报文段都必须要把ACK置为1 SYN:同步序列号,用来发起一个连接.当SYN=1而ACK

TCP的三次握手四次断开

TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接3个过程,建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: TCP三次握手过程 1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步

TCP/IP三次握手和HTTP过程(转)

1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_

TCP的三次握手与四次挥手

最近在看一些Tcp网络编程方面的内容,不免涉及客户端和服务器交互的内容,其中最经典的应该是TCP的三次握手和四次挥手了. 背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据.IP协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程.而端到端的通信才应该是应用进程之间的通信. UDP,在传送数据前不需要先建立连接,远地的主机在

TCP的三次握手与四次挥手(个人总结)

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确认号. 确认ACK:占1位,仅当ACK=1时,确认号字段才有效.AC

TCP协议三次握手、四次挥手过程

本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数据.断开连接. 建立TCP连接很简单,通过三次握手便可建立连接.建立好连接后,开始传输数据.TCP数据传输牵涉到的概念很多:超时重传.快速重传.流量控制.拥塞控制等等.断开连接的过程也很简单,通过四次握手完成断开连接的过程.三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并

小tips:TCP的三次握手、长连接、 短连接、 SPDY 协议

当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的. TCP的三次握手 三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包

TCP的三次握手、四次挥手--非常详细讲解

TCP(Transmission Control Protocol) 传输控制协议 1?TCP三次握手和四次挥手的过程图 tcp的6种标志位的分别代表: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 客户端TCP状态迁移:CLOSED->SYN_SENT-

简析TCP的三次握手与四次分手

TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层:在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Se