TCP

客户端

先创建socket对象建立tcp客户端,明确服务端的地址和端口,必须与服务端对应,要不然对方收不到消息,就像快递填错了送货地址。

Socket s = new Socket("127.255.255.25", 10003);

然后建立起连接通道后就会出现socket的IO流,作为客户端我们是发送数据的,我们将数据发送到服务端让它去处理,所以我们获取的也就是OutPutStream,就是将数据写给服务端

OutputStream out = s.getOutputStream();

然后剩下的就是给服务端写数据了,这些操作其实就和IO流那块一样了,比如我们下面这样

out.write("hello,TCP来了".getBytes());

最后一定记得关闭socket资源

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket; public class TcpClient {
public static void main(String[] args) throws IOException, IOException { System.out.println("客户端运行。。。");
/**
* 需求:通过tcp传输数据发送给服务器
* 思路:
* 1、建立tcp客户端socket.明确服务端的地址和端口
* 2、如果通道建立成功就会出现socket io流
* 客户端需要做的就是获取socket流中输出流将数据发送目的地服务端
* 3、通过socket输出流将数据发送
* 4、关闭
*/
//1、建立tcp客户端socket.明确服务端的地址和端口 Socket s = new Socket("127.255.255.25", 10003); //2、如果通道建立成功就会出现socket io流 客户端需要做的就是获取socket流中输出流将数据发送目的地服务端
//3、通过socket输出流将数据发送 OutputStream out = s.getOutputStream();
out.write("hello,TCP来了".getBytes());
//4、关闭
s.close();
}
}

当你给服务端发送完数据后,有可能服务端还会给你回复一些数据,这时候在客户端还需要去接收服务端发送来的数据,只需要

InputStream in = s.getInputStream();

获取读取流,然后像IO流一样操作就可以读取返回的数据了

package tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class TCPClient2 { public static void main(String[] args) throws IOException{
System.out.println("客户端2 run...");
/**
* 案例二:实现客户端和服务端的收发过程
*/
//创建客户端socket对象,明确服务端地址和端口
Socket s = new Socket("127.255.255.25",10009); //发送数据通过socket输出流完成
OutputStream out = s.getOutputStream();
out.write("服务端,我来了".getBytes()); //读取服务器端返回的数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len= in.read(buf);
System.out.println(new String(buf,0,len));
// int len = 0;
// while((len = in.read(buf)) != -1)
// {
// System.out.println(new String(buf,0,len));
// } //关闭资源
s.close(); }
}

服务端

服务端要与客户端相连接,就必须创建一个服务端Serversocket对象,并明确端口,这个端口必须与客户端socket连接的端口一致,然后用一个socket对象去接收客户端的socket

 ServerSocket ss = new ServerSocket(10003);//创建服务端的socket。需要明确端口(监听一个端口),要不然客户端无法连接
Socket s = ss.accept();//服务端只要获取到连接过来的客户端就可以和指定的客户端通信了

这个接收客户端的socket对象s里面封装了不光数据内容,还有数据来源的主机IP等等信息。

然后获取流对象,对客户端发送来的数据进行读取

 InputStream in = s.getInputStream();

接下来就和IO操作一样,对数据进行处理即可。

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TcpServer {
public static void main(String[] args) throws IOException {
System.out.println("服务端。。。");
/**
* 需求:获取客户端的数据并显示在屏幕上
*
* 思路:
* 1、创建服务端的socket。需要明确端口(监听一个端口),要不然客户端无法连接
* 2、服务端只要获取到连接过来的客户端就可以和指定的客户端通信了
* 3、通过获取客户端的读取流对象读取客户端发来的数据
* 33、并显示在屏幕上
* 5、关闭资源
*/ //1、创建服务端的socket。需要明确端口(监听一个端口),要不然客户端无法连接 ServerSocket ss = new ServerSocket(10003); //2、服务端只要获取到连接过来的客户端就可以和指定的客户端通信了 Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
//3、通过获取客户端的读取流对象读取客户端发来的数据
InputStream in = s.getInputStream(); //33、并显示在屏幕上
byte[] buf = new byte[1024];
int len = 0;
while((len = in.read(buf)) != -1)
{
System.out.println(new String(buf, 0, len));
} //5、关闭资源
s.close();
//ss.close(); 这一般不关
}
}

一般服务端接收到数据之后,它还会给客户端返回一些反馈信息,我们可以继续获取读写流,对客户端进行写入操作,即反馈信息。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TcpServer2 {
public static void main(String[] args) throws IOException { System.out.println("服务端2 run...");
/**
* 案例二:实现客户端和服务端的收发过程
* 服务器端
*/ //创建tcp服务端socket明确端口
ServerSocket ss = new ServerSocket(10009);
while(true)
{
//获取客户端对象
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"...connected"); //读取客户端发送过来的数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf); //读取到数据之前,线程处于阻塞状态
System.out.println(new String(buf,0,len));
// int len = 0;
// while((len = in.read(buf)) != -1)
// {
// System.out.println(new String(buf,0,len));
// }
//
// System.out.println("阻塞了吗?"); //给客户端回馈数据
OutputStream out = s.getOutputStream();
out.write("客户端。我已收到。哦耶!".getBytes()); //关闭客户端
s.close();
} //关闭服务端
//ss.close(); 如果是不断的获取客户端,就不用关闭服务器
}
}

结果演示:

先开启服务端



服务端收到数据



客户端收到反馈

TCP方式的传输的更多相关文章

  1. UDP方式的传输

    UDP 部分内容需要查文档学习,我们需要了解下面的两个类:java.net.DatagramSocket和java.net.DatagramPacket java.net.DatagramSocket ...

  2. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

  3. 用vlc搭建简单流媒体服务器(UDP和TCP方式)

    .UDP(legacy)传统模式 .RTP方式 .RTSP方式 RTSP方式是通过RTP进行流媒体数据的传输的,VLC的实现也是基于UDP的.这种方式网上的参考资料比较多,我就不截图了,直接叙述命令行 ...

  4. 转 RTSP客户端模拟器(TCP方式,Python实现)

    转自: http://www.cnblogs.com/MikeZhang/archive/2012/10/29/rtspTcpClient_DSS_20121029.html 由于某种需求,工作中需要 ...

  5. WCF的Restful和TCP方式调用性能比较

    1. 实验背景关于WCF提供分布式访问服务,最常用的两种方式Restful方式和Tcp方式,在本地测试了一把.结果显示,还是Rest方式,在压力测试下,性能最佳.而且处于跨平台的考虑,和自动化测试方便 ...

  6. Android开发:如何实现TCP和UDP传输

    TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控制协 ...

  7. 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?

    使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? 比如发送文件.记得有人提过可能会发生什么堆栈溢出.怎样避免呢?是不是可以收到数据后发送确认包,收到确认包后再继续发送.或是发送方发送了一些数 ...

  8. Android如何实现TCP和UDP传输

    TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控 ...

  9. ffmpeg强制使用TCP方式读取rtsp流

    ffmpeg强制使用TCP方式处理rtsp流,参考网上资料,得知可以使用如下命令: “ffmpeg -rtsp_transport tcp -i rtsp://admin.......” 可以是使用抓 ...

随机推荐

  1. 实验吧CTF练习题---WEB---因缺思汀的绕过解析

    实验吧web之因缺思汀的绕过 地址:http://www.shiyanbar.com/ctf/1940 flag值:   解题步骤: 1.点开题目,观察题意 2.通过观察题目要求,判断此道题还有代码审 ...

  2. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  3. ViewGroup和View

    ViewGroup本身表示容器, 他是View的一个抽象子类, 它可以包含很多个普通的view组件,另外它还可以包含一个ViewGroup容器. 由于它是一个抽象类,所以实际使用中通常使用viewGr ...

  4. 松软科技课堂:Winform之TextBox

    松软科技文(www.sysoft.net.cn): 文本框的几种模式:Multiline(多行).PasswordChar(密码)将文本框的PasswordChar设为*就是密码框效果,将MultiL ...

  5. 【pymongo.errors】Cursor not found

    pymongo.errors.CursorNotFound: Cursor not found 故事背景:先从数据库中取得所有数据 db['test'].find(),然后对结果进行for循环,但是当 ...

  6. C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)

    public static string HttpPost(string url, string param = null) { HttpWebRequest request; //如果是发送HTTP ...

  7. 使用python asyncio+aiohttp做接口测试(TODO)

    线程是操作系统层面的“并行”, 协程是应用程序层面的“并行”. 协程本质上就是:提供一个环境,保存一些需要等待的任务,当这些任务可以执行(等待结束)的时候,能够执行.再等待的过程中,程序可以执行别的任 ...

  8. 使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示

    使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示 写在前面: 有的小伙伴,会吐槽啦,你这个标题有点长的啊.哈哈 ,好像是的!不过,这个也是本次案例中使用到的关键技术 ...

  9. 阿里云服务器CentOS6.9防火墙启动无效--iptables消失

    iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 ...

  10. 初识Hiberante框架和第一个案例

    今天想回顾一下一个月前学的hibernate框架,也让我了解了持久层的概念(访问数据库). 一.ORM概念 首先提的是ORM概念,O表示Object, R表示Relation(关系),关系型数据库,如 ...