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. leetcode每日一题:判断一个括号字符串是否有效

    题目 一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串.如果一个字符串满足下面 任意 一个条件,那么它就是有效的: 字符串为 (). 它可以表示为 AB(A 与 B 连接),其中A 和 ...

  2. Windows 左ctrl和左alt键互换

    reg代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyb ...

  3. jmeter使用之请求体包含多个数据

    在使用jmeter做压测时,除了增加并发数,还可能在请求体中增加多个字段相同的list.如图: 如果是几百条可以复制粘贴,但是几千上万条复制粘贴就比较费时费力了.另外可能这些数据并不是完全相同,可能还 ...

  4. LVGL基础对象的框架、思维与概念,以及部分源码解析

    概念: Lvgl虽然是以C语言进行编程开发,但其中借鉴了CSS当中编程思想,引入了类与对象的概念,其中lvgl的基础单位为控件,等同于HTML5当中的标签. Lvgl当中的"类"是 ...

  5. Web前端入门第 43 问:CSS 动画之过渡属性 transition 改变用户体验

    CSS3 规范出现之前,要实现一个动画效果那必须借助 JavaScript 的能力才够得着,所以当时的前端开发但凡听到动画交互,那眉头可就成了一个川字儿了~ transition 的出现,改变了实现动 ...

  6. <HarmonyOS第一课02>DevEco Studio的使用

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717494752698457?ha_sou ...

  7. 腾讯出品!这款Markdown神器让你码字效率翻倍,双模式编辑太香了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 由腾讯开源的CherryMarkdown编辑器,集思维导图式大纲写作与专业分屏模式于一身,支 ...

  8. 【代码】百度语音API|Python|文本朗读

    百度语音合成官方教程_AI开放平台 百度语音合成官方demo_github.com 简单地写了一个按段落朗读文本的demo:DEMO链接_gitee.com. 有时候会请求不到数据,不知道是网络原因还 ...

  9. 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北过河人的同步问题(独木桥问题-代码补充)”

    1.问题:一条哦东西走向河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥.只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过.如果在相反的方向上同时有两个人过独木桥则会发生死锁.如 ...

  10. 迭代器失效:99%的C++程序员都会踩的坑 !

    大家好,我是小康. 你踩过这个坑吗?为什么我的程序明明很简单,却总是莫名其妙地崩溃! 嘿,各位 C++ 爱好者们,今天咱们聊一个几乎所有 C++ 程序员都会踩的坑--迭代器失效.无论你是刚入门的新手, ...