您的位置:首页 > 理论基础 > 计算机网络

java学习笔记(3):网络编程

2016-07-27 16:42 459 查看
基本原理

客户端要发起通信,首先得知道运行服务器程序主机的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: