一、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网络传输的更多相关文章

  1. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  2. UNIX网络编程——解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  3. 【Linux 网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数:对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三 ...

  4. 【网络编程】TCP网络编程

    TCP网络程序设计 一.模型函数化 图片:TCP编程模型 1.1 创建套接字Socket #include <sys/types.h> /* See NOTES */ #include & ...

  5. java网络编程基础——TCP网络编程一

    基于TCP协议的网络编程 TCP/IP协议是一种可靠的网络协议,它的通信的两端各自建立一个Socket,从而在通信的两端之间形成网络虚拟链路. Java使用Socket对象来代表两端的通信端口,并通过 ...

  6. 网络编程—代码—UDP数据报传输

    UDP:数据报传输 1.接收端 public class Udps { //接收端 public static void main(String[] args) throws IOException ...

  7. java网络编程基础——TCP网络编程二

    1.半关闭的Socket 前面的服务器和客户端通信时总是以行为最小数据单位,但是在某些协议里,通信的数据单位可能是多行的,当出现多行数据时就 出现一个问题:Socket输出流如何表示输出数据已经结束. ...

  8. java网络编程基础——TCP网络编程三

    AIO实现非阻塞通信 java7 NIO2 提供了异步Channel支持,这种异步Channel可以提供更高效的IO,这种基于异步Channel的IO被称为异步IO(Asynchronous IO) ...

  9. C#网络编程之---TCP协议的同步通信(二)

    上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...

随机推荐

  1. zabbix高级玩法之通过xml文件一次性导入

    author:headsen  chen date: 2018-11-10  10:08:38 背景:zabbix的硬件监控架构已经部署完成,接下来就是创建主机这一步,2400台主机如果采用一台台的创 ...

  2. 去掉VS2010代码中文注释的红色下划线

    VS2010代码中文注释出现红色下划线,代码看上去很不美观,发现是由于安装Visual Assist X插件造成的. 解决办法:打开VAX的Options对话框,取消Advanced --> U ...

  3. 备忘,commons-codec中可能用到的一些加密字符串的方法

    commons-codec中提供了一些加密解密字符串的方法,我们可以直接使用 1.MD5加密: String source = "source"; DigestUtils.md5H ...

  4. 【BZOJ4355】Play with sequence 线段树

    [BZOJ4355]Play with sequence Description 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a ...

  5. Root Motion的脚本处理

    一.Apply RootMotion的作用 Apply RootMotion:控制角色在场景中动画的运动.角色动画驱动角色运动,类似于在游戏中直接使用动画,提高了动画的使用效率. Root Motio ...

  6. Unity3D笔记十六 输入输出-键盘事件、鼠标事件

    输入与控制操作Unity为开发者提供了Input类库,其中包括键盘事件.鼠标事件和触摸事件等一切跨平台所需要的控制事件. 一.键盘事件 1.按下事件 Input.GetKeyDown():如果按键被按 ...

  7. C++和Java中的静态Static用法

    C++和Java中都有的一个静态关键字Static,可以放在类中的变量或者函数之前,就成了静态变量或者静态函数. 静态变量又分为静态全局变量和静态局部变量,可参见网上大神总结的C++全局变量,局部变量 ...

  8. resize 按钮不会被伪元素遮盖

    textarea默认有个resize样式,效果就是下面这样 读 <css 揭秘>时发现两个亮点: 其实这个属性不仅适用于 textarea 元素,适用于下面所有元素: elements w ...

  9. Java 构造函数(抽象类中的构造函数) 和 加载

    博客分类: 面向对象设计的原则 与 概念   1. Java 的构造函数 与初始化块: a. 抽象类的构造函数 若果在父类中(也就是抽象类)中显示的写了有参数的构造函数,在子类是就必须写一个构造函数来 ...

  10. URL长度过长的问题

    最近项目中很多跨域的问题,有时候跨域要传递很多参数,甚至有时候要传递整个对象,处理的方法是把对象转换成JSON形式的字符串再传递.此时该JSON字符串就比较长,作为参数附加到URL后面,URL就会变得 ...