1、概述
随着互联网的不断发展,对网络应用程序的需求和要求也越来越高,所以网络编程也是java很重要的一个方面。网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。
java的网络编程提供了两种通信协议 :TCP(传输控制协议)和UDP(数据报协议),其中TCP是可靠的,而UDP是不可靠的,网上的聊天工具一般采用这种协议。
2、IP地址
IP地址是表示一台计算机在互联网中唯一的标记,java的InetAddress类就是表示IP地址,其中分为Inet4Address和Inet6Address两个子类,分别表示IPv4和IPv6。常用方法有:getHostName()得到主机的IP地址,isReachable(int timeout)判断地址是否可以到达。
3、URL
URL是统一资源定位符,可以通过它找到互联网的任何资源(比如一个网页),而通过UrlConnection类得到远程网络资源的属性。<!-- Generated by javadoc (build 1.6.0-beta2) on Mon Mar 19 18:23:48 CST 2007 -->
<noscript></noscript>URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。
public class Test {
public static void main(String[] args) {
try {
URL url=new URL("http://www.baidu.com");//指定远程资源的URL
URLConnection connection=url.openConnection();//获得连接
InputStream input=url.openStream();//获得远程资源的IO
StringBuffer buffer=new StringBuffer();
BufferedReader reader =new BufferedReader(new InputStreamReader(input));
String str="";
while((str=reader.readLine())!=null){
buffer.append(str);//读取远程资源的内容
}
System.out.println("连接远程资源的内容:"+buffer.toString());
System.out.println("连接远程资源的类型:"+connection.getContentType());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4、TCP实现
在java中使用socket(套接字)来完成TCP程序的开发,通过它可以方便的建立可靠、双向、点对点的通信连接。服务器端使用ServerSocket来等待客户端的连接,每一个客户端都需要一个Socket对象来表示。
建立服务器程序:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(6666);//设置服务器等待客户端连接的端口
while(true){
Socket s=ss.accept();
System.out.println("连接成功");
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
System.out.println("Clint("+s.getInetAddress()+"):"+br.readLine());
}
br.close();
s.close();
ss.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
编写客户端程序:
public class Clint {
public static void main(String[] args) {
try {
Socket s=new Socket("127.0.0.1",6666);//建立对服务器端的连接
OutputStream os=s.getOutputStream();
BufferedReader sys=new BufferedReader(new InputStreamReader(System.in));//获得用户的输入信息
String str=sys.readLine();
PrintWriter pw=new PrintWriter(os);
while(!str.equals("bye")){//只要用户不输入“bye”,则将用户输入的信息传输到服务器端
pw.println(str);
pw.flush();
str=sys.readLine();
}
pw.close();
sys.close();
s.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、UDP实现
在java中通过DatagramSocket和DatagramPacket来完成UDP程序的开发。
编写UDP发生的服务器端程序:
public class UDPServer {
public static void main(String[] args) {
byte []b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);//设置发送的数据包长度
try {
DatagramSocket ds=new DatagramSocket(5678);//设置服务器端的连接端口
ds.receive(dp);
ByteArrayInputStream bais=new ByteArrayInputStream(b);
DataInputStream dis=new DataInputStream(bais);
System.out.println(dis.readDouble());
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP客户端设计:
public class UDPClint {
public static void main(String[] args) {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(baos);
try {
dos.writeDouble(5.6);
byte []b=baos.toByteArray();
DatagramPacket dp=new DatagramPacket(b,b.length,new InetSocketAddress("127.0.0.1",5678));
DatagramSocket ds=new DatagramSocket(9999);
ds.send(dp);
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}