网络编程—代码—TCP网络传输
一、TCP:用字符流传输信息
------------------------------------------------------------------------------
[用字符流的要点提示]
1:
将套接字关闭之后,字符流自然也就关闭了,所以只需要socket.shutdownOutput();/socket.shutdownInput();
应为套接字开启的字节流封装在字符流Buffered里面,若果先关闭字符流bw.close(),将会关闭套接字。 抛出java.net.SocketException: Socket is closed异常,说明已经将套接字关闭。
2:必须要写入换行符bw.newLine();(或者在内容末尾加\n),这样在用BufferedReader的readerLine() 接收数据包的时候才能读取到一个换行信息,否则会出现读取错误。
------------------------------------------------------------------------------
public class Tcpc { // 客户端
public static void main(String[] args) throwsUnknownHostException, IOException {
//1.创建套接字指定主机和端口
Socket socket = new Socket(InetAddress.getLocalHost(),8808);
//2打开输入输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//准备要撒送的数据
String send = "我是客户端,请求登录!";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(send);
bw.newLine();
bw.flush();
socket.shutdownOutput();
//4.准备接受返回的信息,并用行读取
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String lin =br.readLine();
System.out.println("客户端开始接受信息!");
while(lin!=null){
System.out.println(lin);
lin=br.readLine();
}
//5关闭资源
socket.shutdownInput();
}
}
-------------------------------------------------------------------------
public class Tcps { // 服务端
public static void main(String[] args) throws IOException {
//1创建套接字,到指定的端口接受信息
ServerSocket serversocket = new ServerSocket(8808);
//2监听客户端的消息
Socket socket = serversocket.accept();
//3.打开输入输出的流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//4封装一个行读取的流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String lin = br.readLine();
while(lin!=null){
System.out.println(lin);
lin = br.readLine();
}
socket.shutdownInput();
//5给客户端一反馈
String replay="我是服务端,允许登录!";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(replay);
bw.newLine();
bw.flush();
//6关闭资源
socket.shutdownOutput();
}
}
------------------------------------------------------------------------------
二、TCP字节流传输信息
TCP:字节流传输信息
-------------------------------------------------------------------------------------
public class Tcpc { //客户端
public static void main(String[] args) throwsUnknownHostException, IOException {
//1.创建套接字指定主机和端口
Socket socket = new Socket(InetAddress.getLocalHost(),8808);
//2打开输入输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//准备要撒送的数据
String send = "我是客户端,请求登录!";
os.write(send.getBytes());
socket.shutdownOutput();
//4.准备接受返回的信息,并用行读取
System.out.println("客户端接受完毕!");
byte[] by = new byte[1024];
is.read(by);
System.out.println(new String(by,0,by.length));
//5关闭资源
socket.shutdownInput();
}
}
-------------------------------------------------------------------------------------
public class Tcps { //服务端
public static void main(String[] args) throws IOException {
//1创建套接字,到指定的端口接受信息
ServerSocket serversocket = new ServerSocket(8808);
//2监听客户端的消息
Socket socket = serversocket.accept();
//3.打开输入输出的流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//4封装一个行读取的流
System.out.println("服务端接收完毕!");
byte[] by = new byte[1024];
is.read(by);
System.out.println(new String(by,0,by.length));
socket.shutdownInput();
//5给客户端一反馈
String replay="我是服务端,允许登录!";
System.out.println("服务端反馈完毕!");
os.write(replay.getBytes());
//6关闭资源
socket.shutdownOutput();
}
}
网络编程—代码—TCP网络传输的更多相关文章
- 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
[Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...
- UNIX网络编程——解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...
- 【Linux 网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数:对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三 ...
- 【网络编程】TCP网络编程
TCP网络程序设计 一.模型函数化 图片:TCP编程模型 1.1 创建套接字Socket #include <sys/types.h> /* See NOTES */ #include & ...
- java网络编程基础——TCP网络编程一
基于TCP协议的网络编程 TCP/IP协议是一种可靠的网络协议,它的通信的两端各自建立一个Socket,从而在通信的两端之间形成网络虚拟链路. Java使用Socket对象来代表两端的通信端口,并通过 ...
- 网络编程—代码—UDP数据报传输
UDP:数据报传输 1.接收端 public class Udps { //接收端 public static void main(String[] args) throws IOException ...
- java网络编程基础——TCP网络编程二
1.半关闭的Socket 前面的服务器和客户端通信时总是以行为最小数据单位,但是在某些协议里,通信的数据单位可能是多行的,当出现多行数据时就 出现一个问题:Socket输出流如何表示输出数据已经结束. ...
- java网络编程基础——TCP网络编程三
AIO实现非阻塞通信 java7 NIO2 提供了异步Channel支持,这种异步Channel可以提供更高效的IO,这种基于异步Channel的IO被称为异步IO(Asynchronous IO) ...
- C#网络编程之---TCP协议的同步通信(二)
上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...
随机推荐
- Web Uploader在低版本IE下无法显示Flash的一种情况
用户反馈在IE 8下无法正常显示Web Uploader控件,并已安装了Flash插件.调试发现在内部抛出了Runtime Error的错误,关键代码如下: Runtime.create = func ...
- OpenCV获取IP摄像头视频
从开源中国博客搬来,合并博客 实验室做一个智能小车的小项目,期间涉及到在PC端处理小车摄像头的视频.这里先用安卓手机代替一下进行试验.大致流程就是手机摄像头获取视频,开启一个IP摄像头服务软件,在局域 ...
- C# 递归与非递归算法与数学公式
1.递归 递归:程序调用自身的编程技巧称为递归(recursion). 优点是:代码简洁,易于理解. 缺点是:运行效率较低. 递归思想:把问题分解成规模更小,但和原问题有着相同解法的问题. 1)下面是 ...
- VC/MFC程序开启关闭和打开自己或其他软件,更改窗口类
一. 关闭自身软件 直接在需要关闭的位置输入 HANDLE hself = GetCurrentProcess(); TerminateProcess(hself, 0); 二.关闭其他软件 流程: ...
- iOS取整
小数向上取整,指小数部分直接进1 x=3.14,ceilf(x)=4 小数向下取整,指直接去掉小数部分 x=3.14,floor(x)=3
- 大话FLASH和EEPROM
最近在看代码的时候,遇到了一个使用FLASH模拟EEPROM的情况,看到这个我当时是一脸蒙蔽啊,对于一个有时候连FLASH和EEPROM都分不清的人来说,怎么可能读懂用FLASH来模拟EEPROM呢? ...
- Linux下 磁盘扩容的两种方式
Hadoop扩容 概述 Hadoop存储容量或计算能力不能满足日益增长的需求时,就需要扩容. 扩容有两个方案: 1) 增加磁盘 2) 增加节点 方案一:扩大虚拟磁盘 扩大容量 将虚拟的Linux关闭, ...
- 蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行.要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 171264 ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
- YARN Architecture
The fundamental idea of YARN is to split up the functionalities of resource management and job sched ...