java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码
TCP传输
Socket和ServerSocket
建立客户端和服务器
建立连接后,通过Socket中的IO流进行数据的传输
关闭socket
同样,客户端与服务器是两个独立的应用程序
TCP协议发送和接收数据的思路图解:
TCP传输-客户端思路
1:建立客户端的Socket服务,并明确要连接的服务器。
2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
3:通过Socket对象的方法,可以获取这两个流
4:通过流的对象可以对数据进行传输
5:如果传输数据完毕,关闭资源
代码体现:
/*
TCP客户端:
A:创建发送端的Socket对象,寻找到相对应的IP和端口以后,连接就建立成功
Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
B:创建输出流对象发送数据
C:创建输入流对象接收数据
D:释放资源 连接被拒绝。TCP协议一定要先启动服务器端,再开客户端
java.net.ConnectException: Connection refused: connect
*/
public class ClientDemo {
public static void main(String[] args) throws IOException, IOException { //A:创建发送端的Socket对象
//Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket s = new Socket("172.19.xx.xx",10010); //B:创建输出流对象发送数据
OutputStream os = s.getOutputStream();
os.write("我来拉!!".getBytes()); //C:创建输入流对象接收数据
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);//阻塞式
String str = new String(bys,0,len);
System.out.println(str); //释放资源
s.close(); }
}
TCP传输—服务端思路
1:建立服务器端的socket服务,需要一个端口
2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信
3:通过客户端的获取流对象的方法,读取数据或者写入数据
4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的
代码体现:
/*
TCP服务器端:
A:创建服务端对象ServerSocket,监听窗口
B:通过accept方法返回一个Socket对象
// public Socket accept()
C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
D:创建输出流发送数据
E:释放资源
*/ public class ServerDemo { public static void main(String[] args) throws IOException { // A:创建服务端对象ServerSocket,监听窗口
ServerSocket ss = new ServerSocket(10010); // B:通过accept方法返回一个Socket对象
// public Socket accept()
Socket s = ss.accept();//阻塞式,等待客户端的连接 // C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
// public InputStream getInputStream() 返回此套接字的输入流
InputStream is = s.getInputStream(); // 读取数据
byte[] bys = new byte[1024];
int len = is.read(bys);// 阻塞式,等待客户端传输数据
// InputStrem : public int read()
// 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。
// 如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
String str = new String(bys, 0, len); // 获取客户端的名称
// 获取客户端的地址对象,再获取名称
String name = s.getInetAddress().getHostName(); //打印数据到控制台
System.out.println("从"+name+"发送: "+str); // D:创建输出流发送数据
OutputStream os = s.getOutputStream();
os.write("数据已收到".getBytes()); // E:释放资源
s.close();// 释放客户端的资源
// ss.close(); 这个不能释放,因为一释放,服务器就关闭了。 }
}
java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码的更多相关文章
- java 26 - 7 网络编程之 TCP协议代码优化
上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流. 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流. B:这次,传输的数据是通过键盘录入的数据. 服务器 ...
- java 25 - 4 网络编程之 UDP协议传输思路
UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...
- java 26 - 9 网络编程之 TCP协议多用户上传文件
TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...
- java 26 - 8 网络编程之 TCP协议的练习
TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: public class ClientDemo { public static void main(String[] args) t ...
- java 26 - 8 网络编程之 TCP协议上传图片
上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看 ...
- java 25 - 4 网络编程之 UDP协议传输的代码优化
UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...
- 网络编程之TCP协议怎么使用?
TCP 通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器会写的数据 表示客户端的类: java.net.Socket;此类实现客户端套接字.套接字是两台机器间通信的端点 套接字:包含了 ...
- 网络编程之tcp协议以及粘包问题
网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...
- 网络编程之TCP协议与UDP协议
了解网络就要了解一些基本的协议今天主要跟大家分享一些关于TCP 协议UDP协议的相关知识 首先介绍一下TCP协议 TCP(Transmission Cintrol Protocol)可靠的.面向连接的 ...
随机推荐
- 如何在silverlight中以同步方式 获取sharepoint2013站点的当前登录账号
最近有个项目用到了silverlight要同步方式获取当前登录账号.异步的方式无法跟其他应用结合.主要先后顺序问题.但是silverlight非常不好获取到当前登录账号.即使获取到了也是异步方式获取. ...
- silverlight如何通过单独部署的WCF站点访问sharepoint2013的图片库
最近有项目silverlight通过单独部署的WCF站点访问sharepoint2013的图片库,需要做个笑脸墙效果如下: 结果开发完毕后无法在SP站点显示出来.使用VS自带的WCF工具进行测试.如下 ...
- 【转】SharePoint camel query查询 event 或者Calendar 日历列表的时候,怎么查询所有的重复发生的事件
When you query a SharePoint calendar your results will contain: All non-recurring events The first e ...
- [Android]在Adapter的getView方法中绑定OnClickListener比较好的方法
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4146512.html 给ListView中每个item绑定点 ...
- 访问其他程序的SheardPreferents
程序A: SharedPreferences preferences=getSharedPreferences("myPreferences", Context.MODE_WORL ...
- objective-c系列-单例
// 地球只有一个,所以声明一个地球对象就可以了,千万不能声明两个啊!同理,有时候一个类也有只能有一个对象的情况,例如服务器,只想存到一个里 // 面,这样子,下次才可以取出上次存的数据. //用全局 ...
- 视频分享:过五关斩六将——我要做IT面霸!
这是我在某网站分享的网络直播课程,现在博客园分享给大家! 本视频适合以下朋友观看: 1)在校计算机及相关专业学生,希望你了解应聘的要求后来改善你的学习: 2)正在求职或打算跳槽的人士: 3)HR或公司 ...
- #winhec# 开发人员刷屏看点 (视频)
今天大家已经被winhec刷屏了,本来不想写这篇了,但看了所有的文章,大家关注的都是windows 10的那些新功能,小米win10刷机,联想千元手机,小娜啥的.对于keynote上第二部分 Don ...
- drop和delete的区别是什么
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.
- HTTPS那些事(二)SSL证书
转自:http://www.guokr.com/post/116169/ 从第一部分HTTPS原理中, 我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密码.在握 ...