黑马程序员----------Java网络编程(Socket编程)笔记

来源:互联网 发布:网络语狗子什么意思 编辑:程序博客网 时间:2024/06/05 18:30

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

网络编程(Socket编程)

通讯要素:1ip和端口号 2:网络通信协议

Ip定位一台主机,端口号定位主机上的一个应用程序

找到主机,和端口号,如何可靠高效的进行数据传输,依靠的是网络通信协议。

 

Java中用InetAddress类来代表ip地址,一个InetAddress对象代表一个ip地址。

如何获取InetAddress对象,通过InetAddressgetByName(String host)方法获得,其中host可以是一个域名,也可以是一个ip地址。

例如:InetAddress.getByName(“www.baidu.com”)或者InetAddress.getByName(“127.0.0.1”).

获取对象后,两个常用方法:

getHostName():获取ip地址对应的主机名

getHostAddress():获取ip地址。

获取本机的InetAddress对象

InetAddress.getLocalHost();返回一个本机IP地址对象

 

网络通信协议

两个重要的协议:

1:传输控制协议Tcp 2:用户数据包协议Udp

两个协议的比较:

 

 

Socket(套接字):

通信的两端都要有socket,是两台机器通信的端点。

网络通信其实就是socket通信。

 

Tcp/Ip协议代码演示:

客户端:

//获取一个socket对象,指定要发送到的ip地址跟端口号

Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);

//获取一个输出流

OutputStream os = socket.getOutputStream();

os.write("我是客户端".getBytes());

os.close();

socket.close();

服务端:

//定义一个serversocket对象,指明接收的端口号

ServerSocket ss=new ServerSocket(9090);

//通过accep()方法获得一个socket对象

Socket socket=ss.accept();

//获取输入流

InputStream is=socket.getInputStream();

byte[] bytes=new byte[4];

int len;

while((len=is.read(bytes))!=-1){

String str=new String(bytes, 0, len);

System.out.print(str);

}

is.close();

socket.close();

ss.close();

 

Ucp/Ip协议代码演示:

客户端:

DatagramSocket ds=new DatagramSocket();

byte[] bytes="我是客户端".getBytes();

//创建一个数据报,指明要发送的ip地址,端口号,和数据

DatagramPacket dp=new DatagramPacket(bytes, 0, bytes.length, InetAddress.getLocalHost(),9090);

//发送数据报

ds.send(dp);

ds.close();

服务端:

//创建一个datagramsocket对象并且指明端口

DatagramSocket ds=new DatagramSocket(9090);

byte[] bytes=new byte[1024];

//用来接收数据的数据报

DatagramPacket dp=new DatagramPacket(bytes, 0, bytes.length);

//接收数据到数据报

ds.receive(dp);

//获取结果

String str=new String(dp.getData(), 0, dp.getLength());

System.out.println(str);

 

Url:统一资源定位符,它表示Internet上某一资源的地址

url的基本结构由五部分组成:

传输协议://主机名:端口号/文件名

如:http://192.168.1.100:8080/helloword/index.html

通过url获取网络中的数据

代码演示:

//获取一个url对象

URL url=new URL("http://127.0.0.1:8080/examples/HelloWorld.txt");

//获取一个输入流

InputStream is=url.openStream();

byte[] bytes=new byte[1024];

int len;

while((len=is.read(bytes))!=-1){

String str=new String(bytes, 0, len);

System.out.print(str);

}

is.close();

Url对象可以通过openConnection();方法返回一个URLConnection对象,然后通过该对象可以获得输入输出流。

0 0