TCP的简单例子

TCP最简单聊天室

客户端

  1. 连接服务器 Socket

  2. 发送消息

    package TCP;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner; //客户端
    public class TcpClientZx01 {
    public static void main(String[] args) {
    Socket socket=null;
    OutputStream os=null;
    Scanner sc=null; //1.要知道服务端的地址
    try {
    InetAddress serverIp= InetAddress.getByName("127.0.0.1");
    int port=9090; //2.建立一个socket连接
    socket=new Socket(serverIp,port);
    os= socket.getOutputStream();
    sc=new Scanner(System.in);
    System.out.println("进入聊天室和邓聊天");
    System.out.println("1为发送");
    String e="";
    while(!e.equals("1")){
    e=sc.next();
    os.write(e.getBytes()); } } catch (Exception e) {
    e.printStackTrace();
    }finally{
    try {
    if(os!=null){
    os.close();
    }
    if(socket!=null){
    socket.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }

服务端

  1. 建立服务的端口 ServerSocket

  2. 等待用户的连接 accept(等待监听)

  3. 接受用户的消息

    public class TcpServerZx01 {
    //服务端
    public static void main(String[] args) {
    ServerSocket serverSocket=null;
    Socket accept=null;
    InputStream is=null;
    ByteArrayOutputStream baos=null; try {
    //1.我得有一个地址
    serverSocket=new ServerSocket(9090);
    while(true) {
    //监听客户端发过来的数据
    accept=serverSocket.accept();
    //2.读取客户端的数据
    is=accept.getInputStream();
    //管道流
    baos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    int len = 0;
    while ((len = is.read(buf)) != -1) {
    baos.write(buf, 0, len);
    } System.out.printf(baos.toString());
    } } catch (IOException e) {
    e.printStackTrace();
    }finally{
    if(baos!=null) {
    try {
    baos.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(is!=null) {
    try {
    is.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(accept!=null) {
    try {
    accept.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(serverSocket!=null) {
    try {
    serverSocket.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    } }
    }

TCP最简单文件上传

文件上传:其实就是IO流,把资源转换成流,读取给出

客户端

public class FileTop {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建一个Socket连接
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9999);
//2.创建一个输出流
OutputStream os=socket.getOutputStream(); //3.读取文件
FileInputStream fis = new FileInputStream(new File("img_7.jpg")); //4.写出文件
byte[] buffer=new byte[1024];//这些都是固定代码,如果明确文件大小,可以不声明1024,避免资源浪费
int len;
while((len=fis.read(buffer))!=-1) {
os.write(buffer,0,len);
} //通知服务器,我已经传输完了
socket.shutdownOutput(); //确定服务器接受完毕才能断开连接
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer2=new byte[1024];
int len2;
while((len2=is.read(buffer2))!=-1){
baos.write(buffer2,0,len2);
}
System.out.println(baos.toString());
//关闭资源,规则都遵循先写后关
baos.close();
is.close();
fis.close();
os.close();
socket.close(); } }

服务端

public class FileDown {

	public static void main(String[] args) throws IOException {
//1.创建服务
ServerSocket serverSocket = new ServerSocket(9999);
//2.监听客户端的连接
Socket socket=serverSocket.accept();//监听,会一直等待客户连接
//3.获取输入流
InputStream is=socket.getInputStream(); //4.文件输出
FileOutputStream fos=new FileOutputStream(new File("reactiv.jpg"));
byte[] buffer=new byte[1024];
int len;
while((len=is.read(buffer))!=-1) {
fos.write(buffer,0,len);
} //通知客户端接收完毕了
OutputStream os=socket.getOutputStream();
os.write("我接受完毕了".getBytes()); //5.关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close(); } }

TCP入门简单例子的更多相关文章

  1. QT编写TCP入门+简单的实际项目(附源程序)

    我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...

  2. boost库asio详解8——几个TCP的简单例子

    摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 void test_asio_synclient() { typedef boost::asio::io_service IoSe ...

  3. Java_Activiti5_菜鸟也来学Activiti5工作流_之入门简单例子(一)

    // VacationRequest.java /** * author : 冯孟活 ^_^ * dates : 2015年9月1日 下午10:32:58 * class : 演示简单的公司请假流程 ...

  4. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  5. Hibernate4.2.4入门(一)——环境搭建和简单例子

    一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...

  6. CANoe 入门 Step by step系列(三)简单例子的剖析【转】

    最好的学习方式是什么?模仿.有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段.正所谓画虎画皮难画骨. ...

  7. 【转载】CANoe 入门 Step by step系列(三)简单例子的剖析

    来源:http://www.cnblogs.com/dongdonghuihui/archive/2012/09/26/2704623.html 最好的学习方式是什么?模仿.有人会问,那不是山寨么?但 ...

  8. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  9. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  10. Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子

    Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...

随机推荐

  1. 1001: 【编程入门】A+B 输入输出练习I

    1001: [编程入门]A+B 输入输出练习I[https://www.cyccfoj.com/problem.php?id=1001] ''' 题目描述 你的任务是计算a+b.这是为了acm初学者专 ...

  2. 请求的资源不支持 http 方法“GET”。

    错误重现 js ajax调用一个ASP.NET MVC写的api时,一直出现错误信息请求的资源不支持 http 方法"GET". 错误原因 ASP.NET MVC中的MVC(Web ...

  3. FireDAC开发DataSnap应用系统【2】-使用TFDJSONDatasets功能

    类别 说明 TFDJSONDatasets FireDAC使用JSONDataSet,其中可包括多个DataSet对象 TFDJSONDataSetsWriter 把TDataSet写入TFDJSON ...

  4. 在Winform开发框架支持多种数据库基础上,增加对国产数据库人大金仓的支持

    一个良好的产品,可能往往需要支持多种数据库的接入,根据实际业务的需要进行调整,有时候可能需要2到3种数据库的支持. 在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统 ...

  5. EvoSuite使用总结

    1.安装EvoSuite插件 以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生 ...

  6. 在web.xml下配置springmvc的核心控制器

    <!DOCTYPE web-app PUBLIC        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" ...

  7. 根据返回值,判断是否执行下一步的方法(Run Keyword And Return Status指令的使用)

    场景分析: 上图"通用模版测试"内容 满足,如果当前页面存在这条数据,即结束执行本条用例,自动执行下一条.如果没有,则调用新建模版关键字,执行新建模版. 脚本如下 1配置运费模版 ...

  8. ZeroTier 穿透ZeroNSD Quickstart

    Create a ZeroTier Network# You may do this manually through the ZeroTier Central WebUI, Install Zero ...

  9. 话说神奇的content="IE=edge,chrome=1"的meta标签内容

    这是个是IE8的专用标记,用来指定IE8浏览器去模拟某个特定版本的IE浏览器的渲染方式(比如人见人烦的IE6),以此来解决部分兼容问题,例如模拟IE7的具体方式如下: < meta http-e ...

  10. MVVM绑定 填坑,必须在与 DependencyObject 相同的线程上创建 DependencySource

    场景:线程里面构建MVVM实体类,实体类包含 Brush 属性时,构建 SolidColorBrush 需要UI线程,否则会报 "必须在与 DependencyObject 相同的线程上创建 ...