java实现最基础的socket网络通信
来源:互联网 发布:od软件下载 编辑:程序博客网 时间:2024/05/19 00:12
一、网络通信基础
网络中存在很多的通信实体,每一个通信实体都有一个标识符就是IP地址。
而现实中每一个网络实体可以和多个通信程序同时进行网络通信,这就需要使用端口号进行区分。
二、java中的基本网络支持
1、IP地址使用InetAddress类来表示。
获取InetAddress实例的两个方法为:
(1)getByName(String host) 根据主机获取对应的InetAddress对象
(2)getByAddress(byte[] addr)根据IP地址获取InetAddress对象
2、InetAddress提供了三个方法来获取InetAddress实例对应的IP地址和主机名
(1)String getCanonicalHostName()获取此IP地址的权限定域名
(2)String getHostAddress()获取InetAddress实例对应的IP地址
(3)String getHostName()获取此IP地址的主机名
此外InetAddress类使用getLocalHost()方法获取本机IP地址对应的InetAddress实例,使用isReachable()方法测试是否可以到达该地址。
三、java实现简单的TCP/IP通信
服务器端使用ServerSocket创建TCP服务器,使用accept()进行监听,如果接收到客户端请求则返回一个与客户端对应的Socket,否则处于等待状态。
客户端根据服务器的IP,连接服务器。
服务器代码:
import java.net.*;import java.io.*;/**手机端代码手机端作为服务器,获取自己的ip地址,并显示以供客户端连接*/public class phone_Server{ public static void main(String[] args) throws IOException { //打印本机的IP地址 InetAddress address=InetAddress.getLocalHost(); System.out.println("本机的IP地址是"+address.getHostAddress()); // 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); // 采用循环不断接受来自客户端的请求 while (true) { // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket Socket s = ss.accept(); // 将Socket对应的输出流包装成PrintStream PrintStream ps = new PrintStream(s.getOutputStream()); // 进行普通IO操作 ps.println("您好,您收到了服务器的新年祝福!"); // 关闭输出流,关闭Socket ps.close(); s.close(); } }}
客户端代码:
/**PC端代码PC作为客户端,根据服务器的IP地址和端口号连接服务器*/import java.net.*;import java.io.*;public class PC_Client{ public static void main(String[] args) throws IOException { //Socket socket = new Socket("127.0.0.1" , 30000); Socket socket = new Socket("192.168.47.1" , 30000);//这里的IP地址填写手机端服务器的IP地址 // 将Socket对应的输入流包装成BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 进行普通IO操作 String line = br.readLine(); System.out.println("来自服务器的数据:" + line); // 关闭输入流、socket br.close(); socket.close(); }}
补充一点socket传输大数据的内容
由于socket单次传输的数量是有一定的限制的,所以应该分批次传输和接受
可以写成这样:
传输
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); int start=0; while((start+1024)<data.length) { out.write(data, start,1024); start=start+1024; } if(start<data.length) { out.write(data, start,(data.length-start+1)); } //String str = new String(data); //out.writeUTF(str); }catch (Exception e) { Log.d(TAG, "文件传输异常"); }
接受
DataInputStream input = new DataInputStream(socket.getInputStream()); byte []buf=new byte[1024]; int readnum=0; while(true) { readnum=input.read(buf); if(readnum>0) { System.out.println(Arrays.toString(buf)); while((readnum=input.read(buf))>0) { System.out.println(Arrays.toString(buf)); } } }
原文链接:http://www.cnblogs.com/bewolf/p/4642723.html
- java实现最基础的socket网络通信
- java的网络通信最基本实现
- Java网络基础,Socket通信基础
- JAVA的网络通信----SOCKET
- java网络编程基础Socket通信应用
- java socket类实现网络通信
- Java 用socket实现网络通信
- java通过Socket实现TCP网络通信
- java 网络通信socket实现简单实例
- 最基本socket网络通信
- c++ Windows Socket实现最简单的C/S网络通信(TCP)
- Java网络通信Socket
- java 网络通信 socket
- 基于Java的socket网络通信
- java—网络通信socket的例子
- java 基于TCP的Socket网络通信
- java 基于UDP的Socket网络通信
- JAVA-Socket通信基础
- 关于对话框
- 如果在 macOS 10.12 上没有任何来源 应该如何操作?
- JDBC-WEB操作
- UE4让物体始终朝向摄像机(二)—RInterp To用法
- [C++模板技术] TypeList(1)
- java实现最基础的socket网络通信
- HTTP与HTTPS的区别
- C# 运算符重载
- 文章标题
- es6的Object.keys()和map()组合使用的案例
- 深入理解Java虚拟机
- storm 1.0版本滑动窗口的实现及原理
- Combinations
- 分享到动画弹出框