基本原理

客户端要发起通信,首先得知道运行服务器程序主机的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

java学习笔记(3):网络编程的更多相关文章

  1. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  2. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  3. nodejs学习笔记之网络编程

    了解一下OSI七层模型   OSI层 功能 TCP/IP协议 应用层 文件传输,电子邮件,文件服务,虚拟终端  TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化 ...

  4. 【原】Java学习笔记034 - 网络

    package cn.temptation; import java.net.InetAddress; public class Sample01 { public static void main( ...

  5. 7.4 (java学习笔记)网络编程之TCP

    一.TCP 1.1 TCP(Transmission Control Protocol 传输控制协议),是一种面向连接的,安全的传输协议,但效率相比于UDP而言比较低. TCP传输时需要确保先建立连接 ...

  6. Java精选笔记_网络编程

    网络编程 概述 现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈. 在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(C ...

  7. python学习笔记11 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  8. python学习笔记10 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  9. Java学习图形界面+网络编程案例---------网络简易通讯

    主要思想: 主类继承JPanel,在构造方法中将JFrame设成空布局:在其中适当位置添加组件:实现事件监听处理 DATE:2015-10-31 服务器端代码: /** * @author Oyc * ...

  10. JavaSE 学习笔记之网络编程(二十三)

    端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. java 中ip对象:InetAddress. import ja ...

随机推荐

  1. Linux之绝处逢生------SysRq

    参考: http://www.linuxfly.org/post/545/ http://www.jb51.net/article/13525.htm 做法: 未雨绸缪 # " > / ...

  2. python操作Excel文件

    参考: http://www.cnblogs.com/tianyajuanke/p/4048844.html http://blog.chinaunix.net/uid-24701781-id-334 ...

  3. Python模块常用的几种安装方式

    Python模块安装方法 一.方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行:pytho ...

  4. Bitmap vs 2Bitmap的实现

    [本文链接] http://www.cnblogs.com/hellogiser/p/bitmap-vs-2bitmap.html [题目] 在2.5亿个整数找出不重复的整数,内存不足以容纳着2.5亿 ...

  5. android打电话的小程序

    主要使用了Intent以及uses-permission标签. call.rar 下载后直接导入项目

  6. jquery 常用的备忘

    1.table 取  tr 的 id值 <table class="table table-striped table-hover table-bordered" id=&q ...

  7. Javascript调用C#后台方法及JSon解析

    Javascript调用C#后台方法及JSon解析   如何使用Ajax 调用C# 后台方法. 本文目录 如何使用Ajax 调用C# 后台方法. 1.后台(.cs)测试方法 2.前台调用(javasc ...

  8. 【linux】学习1

    郁闷啊 好多东西要学 下面大概就是鸟哥那本书的第五章内容吧 linux命令: Ctrl + Alt + F1 ~ F6 : 切换终端 ls  -al  ~ :显示主文件夹下的所有隐藏文件 date: ...

  9. 创建URL为空的解决办法

    在使用+URLWithString:或-initWithString:创建一个URL对象时,提供的参数字符串必须符合RFC 2396标准(O网页链接.而这两个方法又是根据RFC 1738(O网页链接和 ...

  10. 22中编程语言的HelloWorld

    C:printf("HelloWorld"); C++ : cout<<"HelloWorld"; QBasic : Print "Hel ...