java网络编程
来源:互联网 发布:混沌摆淘宝 编辑:程序博客网 时间:2024/05/18 16:39
java为网络支持提供了java.net包。
1.使用InetAddress类
InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例。
getByName(String host):根据主机获取对应的InetAddress对象;
getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAddress对象;
还有如下三个方法来获取InetAddress实例对应的IP地址和主机名
String getCanonicalHostName():获取此IP地址的全限定域名
String getHostAddress():返回该InetAddress实例对应的IP地址字符串(以字符串形式);
String getHostName():获取此IP地址的主机名
示例代码如下:
public static void main(String[] args) throws UnknownHostException {
InetAddress address=InetAddress.getLocalHost();
System.out.println("主机名称:"+address.getHostName());
System.out.println("ip地址:"+address.getHostAddress());
byte[] b=address.getAddress();//获取字节形式的IP地址
System.out.println("字节形式的IP地址:"+Arrays.toString(b));
System.out.println(address);
//按机器的名称获取InertAddress实例
// InetAddress address1=InetAddress.getByName("尹文强的PC");
InetAddress address1=InetAddress.getByName("125.217.34.61");
System.out.println("主机名称:"+address1.getHostName());
System.out.println("ip地址:"+address1.getHostAddress());
}
2.使用URL类
URL类提供了多个构造器用于创建URL对象,一旦获得了URL对象之后就可以调用如下方法来访问URL对应的资源.
String getFile():获取该URL的资源名
String getHost():获得该URL的主机名
String getPath():获得该URL的路径部分
String getPort():获取该URL的端口号
String getProtocol():获取该URL的协议名称
URLConnection openConnection():返回一个URL Connection对象,他代表了与URL所引用的远程对象的连接
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//创建一个URL实例
URL imooc=new URL("http://www.imoc.com");
//?后面表示参数,#后面表示锚点
URL url=new URL(imooc,"/index.html?username=com#test");
System.out.println("协议:"+url.getProtocol());
System.out.println("主机:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("文件路径:"+url.getPath());
System.out.println("文件名"+url.getFile());
System.out.println("相对路径"+url.getRef());
System.out.println("查询字符串"+url.getQuery());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
3.基于TCP的socket通信
分为服务器端和客户端
服务器端代码
1.创建一个服务器socket,即ServerSocket,指定绑定的端口,并监听
2.调用accept()方法开始监听,等待客户端连接
3.获取输入流并读取客户端信息
4.获取输出流,响应客户端的请求
5.关闭资源
public class Server {
public static void main(String[] args) {
try {
//1.创建一个服务器socket,即ServerSocket,指定绑定的端口,并监听
ServerSocket serverSocket=new ServerSocket(8888);
//2.调用accept()方法开始监听,等待客户端连接
System.out.println("***服务器即将启动,等待客户端的连接***");
Socket socket=serverSocket.accept();
//3.获取输入流并读取客户端信息
InputStream is=socket.getInputStream();//输入字节流
InputStreamReader isr=new InputStreamReader(is);//将字节流转化为字符流
BufferedReader br=new BufferedReader(isr);//为输入流添加缓冲
String info=null;
while((info=br.readLine())!=null)//循环读取客户端的信息
{
System.out.println("我是服务器,客户端说"+info);
}
//关闭输入流
socket.shutdownInput();
//4.获取输出流,响应客户端的请求
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);//包装为打印流
pw.write("欢迎您!");
pw.flush();
//5.关闭资源
os.close();
pw.close();
is.close();
isr.close();
br.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端示例代码
1.创建客户端Socket,指向服务器地址和端口号
2.获取输出流,向服务端发送信息
3.获取输入流,并读取服务器端的响应信息
4.关闭资源
public class cilent {
public static void main(String[] args) {
try {
//1.创建客户端Socket,指向服务器地址和端口号
Socket socket=new Socket("localhost",8888);
//2.获取输出流,向服务端发送信息
OutputStream os=socket.getOutputStream();//字节输入
//将输出流包装为打印流
PrintWriter pw=new PrintWriter(os);
pw.write("用户名:admin;密码:123456");
pw.flush();
//关闭输入流
socket.shutdownOutput();
//3.获取输入流,并读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null)
{
System.out.println("我是客户端,服务器端说"+info);
}
//4.关闭资源
is.close();
br.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
多线程实现多个客户端同时响应
服务器端
while循环不停的监听客户端
try {
//1.创建一个服务器socket,即ServerSocket,指定绑定的端口,并监听
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("***服务器即将启动,等待客户端的连接***");
int count=0;
Socket socket=null;
while(true)
{
//2.调用accept()方法开始监听,等待客户端连接
socket=serverSocket.accept();
//创立线程
ServerThread thread=new ServerThread(socket);
//启动线程
thread.start();
count++;
System.out.println(count);
//获取客户端的IP地址
InetAddress inetaddress=socket.getInetAddress();
System.out.println("客户端的IP地址为:"+inetaddress.getHostAddress());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
多线程端
每一个客户端就是一个子线程
public class ServerThread extends Thread {
//和本线程相关的Socket
Socket socket=null;
//构造函数初始化
public ServerThread( Socket socket)
{
this.socket=socket;
}
//线程执行的操作,响应客户端的请求
public void run() {
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
//获取输入流并读取客户端信息
is = socket.getInputStream();
//输入字节流
isr=new InputStreamReader(is);//将字节流转化为字符流
br=new BufferedReader(isr);//为输入流添加缓冲
String info=null;
while((info=br.readLine())!=null)//循环读取客户端的信息
{
System.out.println("我是服务器,客户端说"+info);
}
//获取输出流,响应客户端的请求
os=socket.getOutputStream();
pw=new PrintWriter(os);//包装为打印流
pw.write("欢迎您!");
pw.flush();
} catch (IOException e1) {
e1.printStackTrace();
}finally {
try {
os.close();
pw.close();
is.close();
isr.close();
br.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端
public static void main(String[] args) {
try {
//1.创建客户端Socket,指向服务器地址和端口号
Socket socket=new Socket("localhost",8888);
//2.获取输出流,向服务端发送信息
OutputStream os=socket.getOutputStream();//字节输入
//将输出流包装为打印流
PrintWriter pw=new PrintWriter(os);
pw.write("用户名:admin;密码:123456");
pw.flush();
//关闭输入流
socket.shutdownOutput();
//3.获取输入流,并读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null)
{
System.out.println("我是客户端,服务器端说"+info);
}
//4.关闭资源
is.close();
br.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
基于UDP的socket编程
0 0
- 【网络编程】JAVA网络编程
- java网络编程:网络基本概念
- Java网络编程-UDP编程
- Java 高层网络编程
- Java网络编程2
- Java网络编程3
- Java网络编程4
- Java网络服务器编程
- java网络编程1
- java网络编程2
- JAVA网络编程
- Java网络服务器编程
- java网络编程
- Java 高层网络编程
- Java 高层网络编程
- Java网络服务器编程
- Java网络编程
- JAVA网络编程
- 【MySQL基础】多表操作
- 【NOI2009】bzoj1563 诗人小G
- Windows下配置gVim
- nyoj-水池数目
- LintCode-删除元素
- java网络编程
- 创建自己项目的组件API
- OpenGL渲染的基本流程
- teamviewer 实现 vpn 功能
- 不同浏览器兼容性——常用的CSS Hack技术
- cookie到底是怎样存储数据的
- WOWZA的安装及(VOD+LIVE)简单配置和VLC RTP推流
- 【git使用】Failed to connect to 127.0.0.1 port 1080: Connection refused
- (1)Hadoop 1.2.1伪分布搭建