1. IP
package net;
import java.net.*;
import java.util.Arrays;
public class IPTest {
public static void main(String[] args) {
try {
//不能new,所以用构造方法
InetAddress ip = InetAddress.getByAddress(new byte[]{10,1,1,1});//ip地址
System.out.println(ip);
ip = InetAddress.getByAddress("testip", new byte[]{10,1,1,2});
System.out.println(ip);
ip = InetAddress.getByName("www.sdut.edu.cn");//从其他网站直接获得
System.out.println(ip);
ip = InetAddress.getLocalHost();//获取本机的地址
System.out.println(ip);
//ip为一个类
System.out.println(ip.getHostName());
System.out.println(ip.getHostAddress());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
/10.1.1.1
testip/10.1.1.2
www.sdut.edu.cn/210.44.176.169
949/10.6.17.49
949
10.6.17.49
2. URL
package net;
import java.net.*;
public class URLTest {
public static void main(String[] args) {
try {
URL url = new URL("http://etc.sdut.edu.cn:90/meol/jpk/course/layout/newpage/index.jsp?courseId=15679&path=1111##");
System.out.println(url.getProtocol());//协议
System.out.println(url.getHost());//主机名
System.out.println(url.getPort());//端口号
System.out.println(url.getDefaultPort());//协议的默认端口号。根据协议
System.out.println(url.getPath());//路径
System.out.println(url.getFile());//文件
System.out.println(url.getQuery());//查询字符串。?后面的键值对
System.out.println(url.getRef());//引用
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
http
etc.sdut.edu.cn
90
80
/meol/jpk/course/layout/newpage/index.jsp
/meol/jpk/course/layout/newpage/index.jsp?courseId=15679&path=1111
courseId=15679&path=1111
#
90为自己加的,如果不在主机名后面加端口号,则输出-1
3. TCP协议通信
打电话!
//服务器
//服务器
package net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);//服务器端只需提供端口号
while (true) {
Socket socket = ss.accept();//等待连接
//socket为端口号和ip地址的组合
System.out.println("服务器端:"+socket);
//服务器端得到数据
System.out.println("服务器端读取数据!");
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = 0;
String str = null;
while((len = is.read(bytes)) != -1){
str = new String(bytes, 0, len);
System.out.println(str);
}
socket.shutdownInput();
is.close();
//服务器得到信息之后向客户端进行反馈
OutputStream os = socket.getOutputStream();
os.write(("HELLO CLIENT,我收到了信息:" + str).getBytes());
System.out.println("服务器端写出数据完毕!");
socket.shutdownOutput();
os.close();
socket.close();
if (str.equals("end"))
break;
}
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//客户端
package net;
//客户端
package net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
public static void main(String[] args) {
try {
Socket socket = new Socket(InetAddress.getLocalHost(),8888);//ip地址和端口号(服务器端)。此时用服务器端也在本机上,所以getLocalHost方法,否则用getAddress方法
System.out.println("客户端:"+socket);
//客户端主动输出一个字符串
String data = "end";
OutputStream os = socket.getOutputStream();
os.write(data.getBytes());
System.out.println("客户端数据写出完毕!");
os.close();
socket.shutdownOutput();
//客户端收到服务器端的反馈
System.out.println("客户端读取数据!");
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = 0;
String str = null;
while((len = is.read(bytes)) != -1){
str = new String(bytes, 0, len);
System.out.println(str);
}
socket.shutdownInput();
is.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4. UDP协议通信
进行写信!
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(9999);
byte[] buf = new byte[1024];//必须预估大小,所以不可靠,可能存不过来
DatagramPacket dp = new DatagramPacket(buf, buf.length);//只需有缓冲区(字节数组)和大小
ds.receive(dp);
//
byte[] data = dp.getData();
int length = dp.getLength();
InetAddress ipClient = dp.getAddress();
int port = dp.getPort();
String str = new String(data, 0, length);
System.out.println("服务器端收到:" + str);
//收到信后进行反馈
String dataOut = "HELLO CLIENT,"+str;
DatagramPacket dpOut = new DatagramPacket(dataOut.getBytes(), dataOut.length(), ipClient, port);
ds.send(dpOut);
ds.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPClient {
public static void main(String[] args) {
try {
//运载工具:邮递员
DatagramSocket ds = new DatagramSocket();
String data = "HELLO UDPSever!";//信内容
//数据报:打包
DatagramPacket dp = new DatagramPacket(data.getBytes(), data.length(), InetAddress.getLocalHost(), 9999);//将数据和信封打包
ds.send(dp);
//接受反馈
byte[] buf = new byte[1024];
DatagramPacket dpIn = new DatagramPacket(buf, buf.length);
ds.receive(dpIn);
System.out.println(new String(dpIn.getData(), 0, dpIn.getLength()));
ds.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
服务器端:
服务器端收到:HELLO UDPSever!
客户端:
HELLO CLIENT,HELLO UDPSever!