关于Java的网络通信简要介绍
来源:互联网 发布:arduino图形化编程 编辑:程序博客网 时间:2024/05/16 16:10
一.网络Socket通信可以分为两种:
1.TCP/IP通信
2.UDP/IP通信
二.TCP协议是一种以固连线为基础的协议,它提供两台计算机之间可靠的数据传送。可以保证从一端数据传至连接的另一端时,数据能够确实送达。
三.UDP协议无连接通信协议,不保证可靠数据的传输,但能够同时向若干目标发送数据。UDP协议适合于一些对数据准确性要求不高的场合。
四.针对Socket通信简要介绍一个例子:(PS:只是对Socket通信的一个简单应用,不喜勿喷,欢迎提出意见!)
这个例子我采用到了线程,线程同步来编写;
首先,先创建一个服务器端:先创建ServerSocket对象来存储通信时的端口号;
接着创建Socket来监听服务器的端口,并且通过InputStream来得到传送过来的数据;
由于我采用的是线程来运行通信,所以如果传递过来的数据为空的时候,说明客户端没有发送数据,所以将客户端启动,并且将服务器端挂起。(要注意必须先激活客户端,才挂起服务器,否则当你挂起服务器之后,然后启动线程,系统会自动把服务器线程给开启。);如果数据不为空,那么将数据输出,然后创建一个输出流对象,方便我们可以从控制台输入数据。接着我用了一个判断,判断输入的数据是不是字符0,如果是就结束该线程。接着将数据写入,发送,关闭以上的所有操作对象。
public class Server implements Runnable{private static Integer o = 1;@Overridepublic void run() {synchronized (o) {while(true){try {ServerSocket ss = new ServerSocket(8888);Socket s = ss.accept();InputStream in = s.getInputStream();byte [] data = new byte[1024];in.read(data);if(data.equals("")){o.notify();try {o.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{String str = new String(data);System.out.println("服务器收到的信息是: " + str);OutputStream out = s.getOutputStream();Scanner sin = new Scanner(System.in);String si = sin.nextLine();while(si.equals("0")){Thread.currentThread().stop();}out.write(si.getBytes());out.flush();out.close();in.close();s.close();ss.close();}} catch (IOException e) {e.printStackTrace();}}}}}接着是客户端的介绍:
第一步,创建一个Socket对象来存储需要进行交流的IP地址和通信的端口号;
接着创建一个输出流对象用来写入数据;
后面的代码和服务器端的代码同理。
public class Client implements Runnable{private static Integer o = 1;@Overridepublic void run() {while(true){synchronized (o) {try {Socket socket = new Socket("192.168.2.101", 8888);OutputStream out = socket.getOutputStream();Scanner sin = new Scanner(System.in);String string = sin.nextLine();out.write(string.getBytes());out.flush();InputStream in = socket.getInputStream();byte [] data = new byte[1024];in.read(data);if(data.equals("")){o.notify();o.wait();}else{String string2 = new String(data);System.out.println("客户端接收到的信息是: " + string2);in.close();out.close();socket.close();}} catch (Exception e) {}}}}}然后是主函数的调用了:
在这里调用的时候需要特别注意:需要先启动服务器线程(所以我先把客户端线程给屏蔽了)
public class Test {public static void main(String[] args) {Server server = new Server();Client client = new Client();Thread thread = new Thread(server);Thread thread2 = new Thread(client);thread.start();//thread2.start();}}然后启动客户端线程:
public class Test {public static void main(String[] args) {Server server = new Server();Client client = new Client();Thread thread = new Thread(server);Thread thread2 = new Thread(client);//thread.start();thread2.start();}}由以上可知我们开启了两个线程,此时系统运行了两个java文件,控制台截图:
按下回车键之后会自动跳转到以下截图:
可以继续输入
接着客户端会出现:
欢迎各位点评指导!!!
- 关于Java的网络通信简要介绍
- 【计算机网络】关于三种网络通信模式以及java中三种通信方式的实现介绍
- 基本网络参数的简要介绍
- java socket通信的简要举例
- 介绍几种java中网络通信的方式
- 基于nio的java网络通信框架介绍和选择
- 介绍几种java中网络通信的方式
- 简要介绍Java的类加载机制
- java filter过滤器的功能简要介绍
- java filter过滤器的功能简要介绍
- java filter过滤器的功能简要介绍
- java filter过滤器的功能简要介绍
- java加密算法简要介绍
- java加密算法简要介绍
- JAVA 基础知识简要介绍
- 关于网络通信的总结
- java NIOSocket 通信简要举例
- 关于计算机研究生报考方向的简要介绍
- MYSQL秒杀的处理
- linux的top命令参数详解
- HTML中的select下拉框内容显示不全的解决办法
- numpy: IO模块
- Android--Builder模式
- 关于Java的网络通信简要介绍
- java_集合体系之List体系总结、应用场景
- golang websocket 服务器
- 任意阶幻方的解法及c++实现
- mybatis的逆向工程使用实现
- Codeforces 327D Block Tower【思维+Bfs】
- nginx: [emerg] duplicate "log_format" name "access"
- 欢迎使用CSDN-markdown编辑器
- cinder 创建backup volume