java中TCP总结
先看一张图,画的很挫,将就看。
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总结的更多相关文章
- java中TCP传输协议
class TcpClient { public static void main(String[] args) throws Exception { //创建client的socket服务,指定目的 ...
- java中TCP两个例子大写服务器和文件上传
大写服务器的实例: package com.core.net; import java.io.BufferedReader; import java.io.BufferedWriter; import ...
- java中tcp小样例
服务端: ServerSocket service = new ServerSocket(7777); Socket socket = service.accept(); InputStream in ...
- TCP协议的基本规则和在Java中的使用
TCP协议是面向连接的,相对于UDP协议来说效率较低,但是比较安全,数据不容易丢失.TCP协议类似打电话的过程,在一端拨号时必须等待对方回应,确定两端建立了连接通道才能传送信息. 在Java中TCP被 ...
- Java中的TCP/UDP网络通信编程
127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
- 第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON
第88节:Java中的Ajax和Jquery ajax是什么?有什么用?原理,怎么用? ajax是asynchronous javascript and xml(异步javascript和xml),是 ...
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
随机推荐
- Spring 中IOC(控制反转)&& 通过SET方式为属性注入值 && Spring表达式
### 1. Spring IoC IoC:Inversion of control:控制反转:在传统开发模式下,对象的创建过程和管理过程都是由开发者通过Java程序来实现的,操作权在开发者的Java ...
- 一张思维导图带你梳理HashMap相关知识
HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...
- ubuntu16.06+vsftpd+nginx搭建图片服务器
安装vsftpd 注:以下指令都在root账户下操作 # apt安装vsftpd apt-get install vsftpd #启动vsftpd service vsftpd start #新建用户 ...
- Oauth2.0协议 http://www.php20.com/forum.php?mod=viewthread&tid=28 (出处: 码农之家)
概要 OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服 ...
- TCP/IP协议之http和https协议
一.TCP/IP协议 TCP/IP 是不同的通信协议的大集合. 1.TCP - 传输控制协议 TCP 用于从应用程序到网络的数据传输控制. TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们 ...
- poj 1957 二分搜索
题意:N个灯泡离地H_i,满足H1 = A ,Hi = (Hi-1 + Hi+1)/2 – 1,HN = B ,求最小B. 思路: 只要二分第二个灯泡的高度就可以推出全部灯泡的高度 如果hi<0 ...
- HTML5 canvas 圆盘抽奖
使用html5 canvas 绘制的圆盘抽奖程序 效果图: 贴上全部代码: 1 <!DOCTYPE html> <html> <head> <meta ch ...
- JS是如何计算 1+1=2 的?
身为程序员多年,作者今天突然对这件事感到十分好奇了.我问计算机芸芸部件,1+1究竟是如何计算的,他们都茫然的看着我. 打开谷歌浏览器->Console面板,大脑向双手不停发送生物电信号,肌肉细胞 ...
- Android Stadio 相关
这几天,电脑坏了.重装系统,慢慢的学到了很多Android stadio 的相关知识.总结一下吧: 1.gradle 编译工具:在工程的gradle/wrapper/gradle–wrapper.pr ...
- ListView, GirldList 等setCurrentItem 不立即刷新
有时候,你调用了adapter的setCurrentItem,然后立马就去获得第一个view的坐标,那么你获取的不是最新的. 要知道程序的并行性.程序运行很快,所以,延迟200s去得到第一个view的 ...