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

黑马程序员-java学习基础加强之网络编程

2013-05-15 10:13 543 查看
----------------------
android培训、java培训、期待与您交流! ----------------------
网络通讯要素:IP地址、端口号、传输协议。
IP地址:
网络中设备的标识,用于区分不同的主机,本地回环地址:127.0.0.1,主机名:localhost
端口号:
用于标识进程的逻辑地址,并非真实的物理存在,而是一个假想的连接装置。
有效端口:0~65535,其中0~1024之间的端口通常用于系统使用或作为保留端口。
传输协议:
TCP协议,面向连接的通信协议,提供两台计算机之间可靠的数据传输,通过三次握手建立连接,形成数据传输
通道,可以进行大量数据的传输,TCP协议是可靠协议,但是连接过程会耗费时间,所以效率有点低。
UDP协议,无连接通信协议,不保证可靠数据的传输,以独立发送数据包的形式进行,不需要建立连接,因此速
度快,但是不可靠。
InetAddress类:
InetAddress类是与IP地址相关的类,利用该类可以获取IP地址、主机名称等信息。提供以下常用方法:
getByName(String host):获取与host相对应的InetAddress对象。
getHostAddress():获取InetAddress对象所包含的IP地址。
getHostName():获取该IP地址对应的主机名。
getLocalHost():获取本地主机的InetAddress对象。
示例程序:
package com.jl.Socket.Demo;
import java.net.*;
public class IPDemo {
public static void main(String[] args) throws UnknownHostException {
InetAddress i=InetAddress.getLocalHost();
System.out.println(i.toString());
System.out.println(“IPAddress--->”i.getHostAddress());
System.out.println(“Name--->”i.getHostName());
}
}
运行结果为:
ykz-20090723PYK/169.254.25.142
IPAddress--->169.254.25.142
Name--->ykz-20090723PYK

TCP传输
TCP传输的步骤:
客户端:
1、 建立Socket服务,指定要连接的主机和端口。
2、 获取Socket输出流,将数据写到该流中,通过网络发送给服务端。
3、 获取Socket输入流,从该流中读取服务端反馈的信息。
4、 关闭客户端资源。
服务器端:
1、 建立ServerSocket服务,指定端口。
2、 获取连接的客户端对象。
3、 获取Socket输入流,从该流中读取客户端发送过来的数据。
4、 获取Socket输出流,将服务器端的反馈信息写入该流中,通过网络发送给客户端。
5、 关闭服务器端资源。
示例代码:
TcpClient类作为客户端
import java.io.*;
import java.net.*;
class TcpClient
{
public static void main(String[] args) throws Exception
{
//建立Socket服务,指定目的主机和端口
Socket s=new Socket("127.0.0.1",10005);
//获取socket流的输出流,将数据写到该流中,并发送给服务端
OutputStream out=s.getOutputStream();
out.write("能收到吗?".getBytes());
//获取socket流中的输入流,从该留中读取服务端的反馈信息,并打印。
InputStream in=s.getInputStream();
byte [] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
}
TcpServer类作为服务器端
import java.io.*;
import java.net.*;
class TcpServer
{
public static void main(String []args) throws Exception
{
//创建ServerSocket服务,指定端口
ServerSocket ss=new ServerSocket(10005);
//获取连接的客户端对象
Socket s=ss.accept();
//打印客户端IP
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected");
Thread.sleep(3000);
//获取socket流的输入流,获取客户端发送过来的数据
InputStream in=s.getInputStream();
byte [] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
//获取socket流的输出流,将服务端的反馈信息写到该流中,发送给客户端
OutputStream out=s.getOutputStream();
Thread.sleep(3000);
out.write("哥们收到了!".getBytes());
}
}

UDP传输
UDP传输的步骤:
发送数据包:
1、 使用DatagramSocket()创建一个数据包套接字。
2、 使用DatagramPacket(byte [] buf,int length,InetAddress address,int port)创建要发送的数据包。
3、 使用DatagramSocket类的send()方法发送数据包。
4、 关闭资源。
接收数据包:
1、 使用DatagramSocket(int port)创建数据包套接字,绑定指定端口。
2、 使用DatagramPacket(byte [] buf, int length)创建字节数据来接收数据包。
3、 使用DatagramPacket类的receive()方法接收数据包。
4、 关闭资源。
示例代码:
Sender类用来发送UDP数据包。
class Sender{
public static void main(String []args)throws Exception{
//创建数据包套接字
DatagramSocket ds=new DatagramSocket();
byte [] buf="JiangLiang".getBytes();
InetAddress ia= InetAddress.getByName("127.0.0.1");
//创建要发送的数据包
DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,10000);
//发送数据包
ds.send(dp);
ds.close();
}
}
Receiver类用来接收UDP数据包。
class Receiver{
public static void main(String [] args)throws Exception{
//创建数据包套接字,并绑定指定端口
DatagramSocket ds=new DatagramSocket(10000);
byte [] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, buf.length);
//接收数据包
ds.receive(dp);
//获取数据包中的信息
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
ds.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: