先看一张图,画的很挫,将就看。

TCP 客户端与服务端通信时,是服务端会拿到客户端的socket进行通信。

TCP就相当于以前的座机,有一个听筒和一个话筒,A用话筒说话,B用听筒听。

下面讲讲java中TCP的使用以及步骤。

TCP客户端步骤:

  1.建立Socket服务,并确定IP和Port

  2.通过socket服务获取输入流或输出流。

  3.通输入或输出流操作数据。

TCP服务端的步骤:

  1.用ServerSocket来监听Port

  2.用accept获取客户端的Socket

  3.通客户端的Socket来获取输入和输出流。

  4.通过数据流传输。

用一个简单实例演示:

package com.core.net;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; class TcpClient{ public static void main(String[] args) throws Exception { Socket s = new Socket("localhost", 10004); OutputStream out = s.getOutputStream(); out.write("tcp come ...".getBytes()); s.close();
}
}
class TcpServer{ public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10004); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".....connect"); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close();
ss.close(); }
}
public class TcpDemo { public static void main(String[] args) { }
}

这个实例只是客服端发送数据,服务器接收数据。

下面是一个例子是客服端发送数据,服务器发送数据。

package com.core.net;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; class Client2{ public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 10004); OutputStream out = socket.getOutputStream(); out.write("服务端,你好".getBytes()); InputStream in = socket.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); socket.close();
}
}
class Server2{ public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10004); Socket s = ss.accept(); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); OutputStream out = s.getOutputStream(); Thread.sleep(10000); out.write("客服端,你好".getBytes()); s.close(); ss.close();
}
}
public class TcpDemo2 { public static void main(String[] args) { }
}

最后一个例子是服务端为大写转换器,客服端输入数据,服务端将输入的数据转换大写。

package com.core.net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; class TransClient{ public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 10005); //键盘输入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//socket输入流
BufferedReader bufin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//socket输出流
BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String line = null;
while((line = reader.readLine())!=null){ if("over".equals(line))
break;
bufout.write(line);
bufout.newLine();//要注意 "\r\n"
bufout.flush(); String str = bufin.readLine();
System.out.println("server:"+str); }
reader.close();
socket.close(); }
} class TransServer{ public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"......connection");
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line = reader.readLine())!=null){ System.out.println(line);
out.write(line.toUpperCase());
out.newLine();
out.flush();
}
s.close();
ss.close();
}
}
public class TransDemo { public static void main(String[] args) { }
}

java中TCP总结的更多相关文章

  1. java中TCP传输协议

    class TcpClient { public static void main(String[] args) throws Exception { //创建client的socket服务,指定目的 ...

  2. java中TCP两个例子大写服务器和文件上传

    大写服务器的实例: package com.core.net; import java.io.BufferedReader; import java.io.BufferedWriter; import ...

  3. java中tcp小样例

    服务端: ServerSocket service = new ServerSocket(7777); Socket socket = service.accept(); InputStream in ...

  4. TCP协议的基本规则和在Java中的使用

    TCP协议是面向连接的,相对于UDP协议来说效率较低,但是比较安全,数据不容易丢失.TCP协议类似打电话的过程,在一端拨号时必须等待对方回应,确定两端建立了连接通道才能传送信息. 在Java中TCP被 ...

  5. Java中的TCP/UDP网络通信编程

    127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...

  6. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  7. 第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON

    第88节:Java中的Ajax和Jquery ajax是什么?有什么用?原理,怎么用? ajax是asynchronous javascript and xml(异步javascript和xml),是 ...

  8. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  9. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

随机推荐

  1. Q&A - Nginx是做什么的?tomcat结合Nginx使用小结

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...

  2. mysql 命令 小结

    CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;创建中文数据库show gl ...

  3. Postgres主备切换

    主备查询 主备不会自动切换(即需要实现线上环境主数据库宕掉之后,从数据库能够自动切换为主数据库,需要借用第三方软件,例如heartbeat等) (1)如何查看是primary还是standby 方法1 ...

  4. [Bzoj4408]神秘数(主席树)

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数. 例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...

  5. Git-Git克隆

    鸡蛋不装在一个篮子里 Git的版本库目录和工作区在一起,因此存在一损俱损的问题,即如果删除一个项目的工作区,同时也会把这个项目的版本库删除掉.一个项目仅在一个工作区中维护太危险了,如果有两个工作区就会 ...

  6. 使用.gitignore忽视项目中的文件/文件夹

    在项目开发的过程中,我们经常需要IDE来提高编程效率.然而,不同的IDE会生成各种各样的临时文件.在项目生命周期中,我们往往不需要关注这类文件的变更记录,因而我们是不需要将它们加入到源代码管理器中. ...

  7. idea中用maven打包spring的java项目(非web)

    之前一直用安装的maven打包spring的javaweb项目,用的是mvn assembly:assembly打包,这次打包非web的spring项目,遇到许多问题,特记录一下正确步骤. 1.配置p ...

  8. MVN settings.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  9. JAVA中使用AES加密解密

    技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info(&qu ...

  10. TCP close seq问题

    测试mt_hls一条流时,发现会话的时长总是对应不上. 仔细观察发现: 注意 1.包1735 (客户端) 发送FIN 请求,seq = 2435582428 2.包1736,1737,1738 (服务 ...