java学习笔记(3):网络编程
2016-07-27 16:42
459 查看
基本原理
客户端要发起通信,首先得知道运行服务器程序主机的IP地址,然后由网络的基础结构利用目标地址,将发送的信息传递到正确的主机上。地址可以是数字型(IPv4或者IPv6),也可以是字符串(必须先被解析)。
InetAddress类代表了一个网络目标地址,包括字符串型和数字型的信息,所以返回的是字符串数组,该实例是不可变的,一旦创建,始终指向一个地址。
NetworkInterface类可以放回本机的网络接口,一个接口可以关联多个地址。
端口用来区分应用程序,将不同类型的文件分开,有点类似线程通信中的管道通信
TCP客户端
就我目前的理解,TCP的客户端和服务器端编程本质都是利用端口,没什么意思,还是直接上爬虫和模拟登陆吧
血泪
显然PrintWriter和BufferedWriter是两个分支,
BufferedWriter bw = new BufferedWriter(new InputStreamWriter(socket.getInputStream()))
PrintWriter pw = new PrintWriter(socket.getInputStream,true);//true 会将流里的数据清空,false会追加,默认是false
之前使用BufferedWriter 发送数据,用BufferedReader接收数据的,可是忘了把‘\n’发过去,服务器一直卡在readLine(),诶,心累,弄了一晚上了
ServerSocket默认绑定的是0.0.0.0 这个IP地址代表当前设备的所有IP地址,无论是127.0.0.1还是联网时分配的地址,都可以.
又哔了狗,Buffer一定要刷新,PrintWriter一定要true
客户端要发起通信,首先得知道运行服务器程序主机的IP地址,然后由网络的基础结构利用目标地址,将发送的信息传递到正确的主机上。地址可以是数字型(IPv4或者IPv6),也可以是字符串(必须先被解析)。
InetAddress类代表了一个网络目标地址,包括字符串型和数字型的信息,所以返回的是字符串数组,该实例是不可变的,一旦创建,始终指向一个地址。
NetworkInterface类可以放回本机的网络接口,一个接口可以关联多个地址。
端口用来区分应用程序,将不同类型的文件分开,有点类似线程通信中的管道通信
import java.util.*; import java.net.*; public class InetAddressTest { public static void main(String[] args){ try{ //返回的应该是本机的网络接口 Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces(); if (interfaceList == null) { System.out.println("NO interface found!"); } else { while(interfaceList.hasMoreElements()){ NetworkInterface iface = interfaceList.nextElement(); //打印接口名 System.out.println("Interface " + iface.getName()); //返回一个接口对应的目标地址集合 Enumeration<InetAddress> addrList = iface.getInetAddresses(); if(!addrList.hasMoreElements()){ System.out.println("No address for this interface"); } while(addrList.hasMoreElements()){ InetAddress address = addrList.nextElement(); System.out.println("Address " + address.getHostAddress()); } } } } catch(SocketException se){ se.printStackTrace(); } } }
TCP客户端
就我目前的理解,TCP的客户端和服务器端编程本质都是利用端口,没什么意思,还是直接上爬虫和模拟登陆吧
血泪
显然PrintWriter和BufferedWriter是两个分支,
BufferedWriter bw = new BufferedWriter(new InputStreamWriter(socket.getInputStream()))
PrintWriter pw = new PrintWriter(socket.getInputStream,true);//true 会将流里的数据清空,false会追加,默认是false
之前使用BufferedWriter 发送数据,用BufferedReader接收数据的,可是忘了把‘\n’发过去,服务器一直卡在readLine(),诶,心累,弄了一晚上了
ServerSocket默认绑定的是0.0.0.0 这个IP地址代表当前设备的所有IP地址,无论是127.0.0.1还是联网时分配的地址,都可以.
又哔了狗,Buffer一定要刷新,PrintWriter一定要true
相关文章推荐
- TCP/IP——socket网络编程总结
- NFS 网络文件系统
- HTTP Status 404 - No result defined for action XXX and result input
- xUtils的网络请求简单封装
- codevs 1922 骑士共存问题 网络流
- react-native 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
- 牛客网 7-27 网络基础 操作系统 编译与体系结构 30题知识点总结
- TCP重传与确认机制
- meta标签中的http-equiv属性介绍
- Reactor模式解析——muduo网络库
- iOS AFNetworking进行网络请求时带上登陆成功后台返回的cookie
- Go语言使用HTTP包创建WEB服务器的方法
- iOS网络加载启动图
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
- TCP滑动窗口
- 混合结构
- socket编程之TCP服务器
- p2p结构
- HTTP与HTTPS的区别
- iOS开发工具-网络封包分析工具Charles