Java基础(24)网络编程

2024-06-19 09:58
文章标签 java 24 编程 网络 基础

本文主要是介绍Java基础(24)网络编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

十一:网络编程 TCP-复制文件

实现:客户端发给服务端,然后在服务端保存起来
import java.io.*;
import java.net.*;
//客户端
class InetTextDemo
{public static void main(String[] args)throws Exception{Socket  s = new Socket("192.168.126.1",10006);//源BufferedReader bufr = new BufferedReader (new FileReader("E:\\hebing\\net.txt"));//目的BufferedWriter bufout = new BufferedWriter (new OutputStreamWriter(s.getOutputStream()));//PrintWriter out = new PrintWriter(s.getOutputStream(), true);//这个较为简单用这个//********************************代码1***********************************//代码1和代码2效果一样//接受服务端  欢迎光临的信息//	InputStream in = s.getInputStream();//	byte[] buf =new byte[1024];//	int len = in.read(buf);//	System.out.println(new String(buf, 0 , len));//BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));//String str = bufin.readLine();  //读socket流,因为服务端卡在while那,所以不会发数据给客户端,所以一直卡在这,两边都卡着//System.out.println(str);//********************************代码1************************************String line = null;while((line = bufr.readLine()) != null){bufout.write(line);bufout.newLine();bufout.flush();//out.println(line);}s.shutdownOutput();//关闭客户端的输出流。相当于给流中加入一个结束标记-1//********************************代码2***********************************代码1和代码2效果一样//接受服务端  欢迎光临的信息//InputStream in = s.getInputStream();//byte[] buf =new byte[1024];//int len = in.read(buf);//System.out.println(new String(buf, 0 , len));BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));String str = bufin.readLine();  //读socket流,因为服务端卡在while那,所以不会发数据给客户端,所以一直卡在这,两边都卡着System.out.println(str);//********************************代码2************************************bufr.close();s.close();}
}

//服务端
import java.io.*;
import java.net.*;
//服务端class InetRece
{public static void main(String[] args)throws Exception{ServerSocket ss = new ServerSocket(10006);//获取对象Socket s = ss.accept();//打印连接上的客户端String ip =s.getInetAddress().getHostAddress();System.out.println(ip+"...connected");//源BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));//目的BufferedWriter bufw = new BufferedWriter(new FileWriter("E:\\hebing\\servet.txt"));//PrintWriter out = new PrintWriter(new FileWriter("E:\\server.txt"),true);String line = null;//客户端把要复制的文件写到输出流中,没有给出结束标志,这里就一直在读读到文件末尾,也没读到换行符,所以又卡这里!!!!!!//上面的写到流中虽然写完了,但是往下走,又走到读取服务端”上传成功”的readLine卡在那了(按实际分析,放的位置不一定一样)//读取的文件中数据没有给结束符。while((line = bufin.readLine()) != null){bufw.write(line);bufw.newLine();bufw.flush();//out.println(line);}//写  欢迎使用BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bufout.write("上传成功");bufout.flush(); //如果这里不写数据根本就没写进socket输出流中,导致对面一直在等//PrintWriter pw = new PrintWriter(s.getOutputStream(), true); //这种较为简便,以后是用这个//pw.println("上传成功");//out.close();bufw.close();s.close();ss.close();}
}

十二.网络编程-TCP复制图片

原理跟上传文件一样
客户端
1.服务端点。
2.读取客户端已有的图片数据。
3.通过socket输出流将数据发给服务端。
4.读取服务端反馈信息
5.关闭。import java.io.*;
import java.net.*;class  IoTextDemo
{public static void main(String[] args)throws Exception{//1.建立socket端点Socket s = new Socket("192.168.126.1",10006);//源FileInputStream fis = new FileInputStream("C:\\daxiong.jpeg");//目的OutputStream out = s.getOutputStream();byte[] buf = new byte[1024];int len = 0;while((len = fis.read(buf)) != -1){out.write(buf,0,len);}//告诉服务端数据已写完,否则一直卡在read那里s.shutdownOutput();InputStream in = s.getInputStream();byte[] bufin = new byte[1024];int num = in.read(bufin);System.out.println(new String(bufin , 0 , num));//	BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));//	String str = bufin.readLine();  //读socket流,因为服务端卡在while那,所以不会发数据给客户端,所以一直卡在这,两边都卡着//	System.out.println(str);fis.close();s.close();}
}

import java.io.*;
import java.net.*;
//服务端
class InetRece
{public static void main(String[] args)throws Exception{//1。建立ServerSocket服务ServerSocket  ss = new ServerSocket(10006);//2.获取对象//获取对象Socket s = ss.accept();String ip =s.getInetAddress().getHostAddress();System.out.println(ip+"...connected");InputStream in  = s.getInputStream();FileOutputStream fos = new FileOutputStream("E:\\hebing\\server7.jpeg");//打印连接上的客户端byte[] buf = new byte[1024];int len = 0;while((len = in.read(buf)) != -1)//客户端在流中没写介乎标记{fos.write(buf,0,len);}//发送给客户端   上传成功OutputStream out = s.getOutputStream();out.write("上传成功".getBytes());//写  欢迎使用//BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//bufout.write("上传成功");//bufout.flush(); //如果这里不写数据根本就没写进socket输出流中,导致对面一直在等fos.close();s.close();ss.close();}
}

十三.并发上传图片


//客户端并发上传图片

import java.io.*;
import java.net.*;class InetTextDemo
{//编译的时候 java PicClient C:\1.jpg  相当于传了一个参数(args[0])public static void main(String[] args)throws Exception{if(args.length >1)//代表传的参数是不是一个{System.out.println("上传的文件数大于1");return ;}File file = new File(args[0]);if(!(file.exists()&&file.isFile())){System.out.println("不存在或者不是文件类型");return;}if(!file.getName().endsWith(".jpeg")){System.out.println("格式错误,请重新选择");return;}if(file.length()>1024*1024*5)//5M{System.out.println("文件过大");}Socket  s = new Socket("192.168.126.1",10008);//源FileInputStream fis = new FileInputStream(file);//目的OutputStream out = s.getOutputStream();int len = 0;byte[] buf = new byte[1024];while((len = fis.read(buf)) != -1){out.write(buf , 0 ,len);}s.shutdownOutput();//关闭客户端的输出流。相当于给流中加入一个结束标记-1BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));String str = bufin.readLine();  //读socket流,因为服务端卡在while那,所以不会发数据给客户端,所以一直卡在这,两边都卡着System.out.println(str);fis.close();s.close();}
}


服务端


这个服务端有个局限性,当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,还有循环回来执行下次accept方法。所以暂时获取不到B客户端对象。


那么为了可以让多个客户端同时并发访问服务端。
那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。

import java.io.*;
import java.net.*;
//服务端class InetReceive implements Runnable
{private Socket s;InetReceive(Socket s){this.s = s;}public void run(){//打印连接上的客户端int count = 1;String ip =s.getInetAddress().getHostAddress();System.out.println(ip+"...connected");try{//源//BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));InputStream in = s.getInputStream();File file = new File("E:\\hebing\\"+ip+"("+count+").jpeg");  //有点生疏了while(file.exists()) //避免覆盖之前的文件{file = new File("E:\\hebing\\"+ip+"("+(count++)+").jpeg");}//目的FileOutputStream fos = new FileOutputStream(file);//BufferedWriter bufw = new BufferedWriter(new FileWriter("E:\\hebing\\servet3.txt"));//PrintWriter out = new PrintWriter(new FileWriter("E:\\server.txt"),true);//String line = null;int len = 0;byte[] buf = new byte[1024];//客户端把要复制的文件写到输出流中,没有给出结束标志,这里就一直在读读到文件末尾,也没读到换行符,所以又卡这里!!!!!!//上面的写到流中虽然写完了,但是往下走,又走到读取服务端”上传成功”的readLine卡在那了(按实际分析,放的位置不一定一样)//读取的文件中数据没有给结束符。while((len = in.read(buf)) != -1){//bufw.write(line);//bufw.newLine();//bufw.flush();fos.write(buf , 0 , len);//out.println(line);}//写  欢迎使用BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bufout.write("上传成功");bufout.flush(); //如果这里不写数据根本就没写进socket输出流中,导致对面一直在等fos.close();s.close();//ss.close();}catch (Exception e){throw new  RuntimeException("上传失败");}//out.close();}
}class InetRece
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10008);while(true){Socket s = ss.accept();//获取客户端,但是目前只能在一个客户端关闭才能接受其他客户端,//这个方法是阻塞式的(!!!!!!),等待客户端连接,所以不能放上面的里面//如果这么写就定了一个线程,不能这么写//Thread t1 = new Thread(new InetReceive(s));new Thread(new InetReceive(s)).start();//如果来了一个客户端,就开了一个客户端,主线程再跑,于是就又开了线程}}
}

十四.网络编程:客户端并发登陆

网络编程:客户端并发登陆
客户端通过键盘录入用户名。
服务端对这个用户名进行校验。

如果该用户存在,在服务端显示XXX,已登录。
并在客户端显示XXX,欢迎光临。

如果该用户存在,在服务端显示XXX,尝试登陆。
并在客户端显示XXX,该用户不存在。

最多登陆三次。
import java.io.*;
import java.net.*;
//客户端
class InetTextDemo
{public static void main(String[] args) throws Exception{Socket s = new  Socket("192.168.126.1",10008);//源BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//目的//PrintWriter//如果是PrintWriter out.write("登陆失败")  PrintStream.write("登陆失败".getBytes)!!!就像InputStream  reader 没什么差别PrintStream out = new PrintStream(s.getOutputStream(),true); //可以自动刷新,不用再些刷新//PrintWriter out = new PrintWriter(s.getOutputStream(),true);//接受服务端的反馈信息BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));//读三次,如果三次都不成功就停止登陆for(int x = 0 ; x<3;x++){System.out.println("dsr");String line = bufr.readLine();//输入一次读取一次System.out.println("dsr over");if(line == null) //确保按ctrl+c时停止输入,按ctrl+c时就给流-1,readLine底层的read读到-1,就返回null{break;}//out.println(line);//写到socket输出流中发给服务端System.out.println("xsj");out.println(line);//out.println();//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意这里要写个换行符,不然服务端的ReadLine()一直读不到换行符,在那堵着System.out.println("xsj over");//判断服务端反馈回来的信息,如果反馈欢迎使用之类的就不用登录了System.out.println("dfksj");String info = bufin.readLine();//读取服务端反馈回来的信息System.out.println("dfksj over");System.out.println("info:"+info);if(info.contains("欢迎")) //读到有  欢迎 就停止登陆{break;}else //没读到就说用户不存在{//System.out.println("用户不存在,请重新登陆");}}s.close();bufr.close();}
}

//服务端
import java.io.*;
import java.net.*;class InetReceive implements Runnable
{private Socket s;InetReceive(Socket s){this.s = s;}public void run(){String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"....connected");try{for(int x = 0 ;x<3;x++){//源BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); //如果放外面就只创建一次,这边是输三次,每次都不一样//目的(写欢迎使用之类的)PrintStream out = new PrintStream(s.getOutputStream(),true) ; //如果放外面就只创建一次,这边是输三次,每次都不一样//PrintWriter out = new PrintWriter(s.getOutputStream(),true) ;//读取本地数据(记录已经注册用户的文件)BufferedReader bufr = new BufferedReader(new FileReader ("E:\\hebing\\login_record.txt"));  //如果放外面就只创建一次,这边是输三次,每次都不一样System.out.println("dsj");String name = bufin.readLine();//读取客户端写过来的数据System.out.println("dsj over");if(name == null){break;}String line = null;boolean succ_flag = false;while((line = bufr.readLine()) != null){if(name.equals(line)){succ_flag = true;break;}}//这时候有可能是成功调处循环,也有可能读完本地本件if(succ_flag == true)//登陆成功{System.out.println("登陆成功");out.println("欢迎使用");//	out.println();//out.println(name+"欢迎使用");}else					//登陆不成功{System.out.println("尝试登录");out.println("登陆失败");//打印进流里PrintStream out = new PrintStream(s.getOutputStream(),true),相当 写 write()+println(空参数)//如果是PrintWriter out.write("登陆失败")  PrintStream.write("登陆失败".getBytes)!!!//out.println();//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意这里要写个换行符,不然客户端的ReadLine()一直读不到换行符,在那堵着//out.println(name+"登陆失败");}}s.close();//bufr.close();//为什么不写????}catch (Exception e){throw new RuntimeException("服务器错误");}}
}class InetRece
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10008);while(true){Socket s = ss.accept();new Thread(new InetReceive(s)).start();}}
}


十五.网络编程-自定义服务端

//自定义服务端

import java.io.*;
import java.net.*;


class InetTextDemo
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = new ServerSocket(11000);
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress());
PrintWriter out = new PrintWriter(s.getOutputStream() , true);
out.println("<font color = 'red' size = '7'>客户端你好</font>");  //设置字体大小及颜色
s.close();
ss.close();
}
}
//在浏览器中输入http://192.168.126.1:11000


十六.网络编程:浏览器客户端,tomcat服务端

网络编程:浏览器客户端,tomcat服务端
1.
客户端:浏览器(telnet)
服务端:自定义。


2.
//打开浏览器通过tomcat服务器访问自定义的网页
客户端:浏览器。
服务端:tomcat服务器。//封装了serverSocket
http://192.168.126.1:8080/ 输入这个  就可以访问tomcat




D:\tomcat\webapps\myweb
在我这个路径下写一个demo.html内容如下
<html>
<body>
<h1>这是我的主页</h1>
<font size =5 color = read>欢迎光临</font>
<div>
啊实打实大师的</br>
啊实打实大师的</br>
啊实打实大师的</br>


</div>
</body>
</html>


然后在浏览器中http://192.168.126.1:8080/myweb/demo.html就可以打印出


//这是我的主页
//欢迎光临 
//啊实打实大师的
//啊实打实大师的
//啊实打实大师的

十七.网络编程-自定义浏览器-Tomcat服务端

1.
客户端:浏览器(telnet)
服务端:自定义。

2.
//打开浏览器通过tomcat服务器访问自定义的网页
客户端:浏览器。
服务端:tomcat服务器。

3.
客户端:自定义。
服务端:Tomcat服务器。
思考的问题,到底浏览器给服务器发了什么,才能请求到myweb的资源:
import java.io.*;
import java.net.*;
class InetTextDemo
{*///这是浏览器给服务端发的数据
//783//192.168.126.1
//784//GET / HTTP/1.1
//785//Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gi
//786//f, image/pjpeg, application/x-ms-xbap, application/msword, application/vnd.ms-ex
//787//cel, application/vnd.ms-powerpoint, */*
//788//Accept-Language: zh-CN
//789//User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.
//790//0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Cent
//791//er PC 6.0; .NET4.0E; .NET4.0C)
//792//Accept-Encoding: gzip, deflate
//793//Host: 192.168.126.1:11000
//794//Connection: Keep-Alive//794以上是数据头
//795以下是数据体,(这里没有)
//两个之间有一行空格,这个是协议规定的
//784   get是一种请求方式
//http://192.168.1.254:11000/myweb/demo.html
//http是协议(应用层),tcp是传输层协议
//192.168.126.1:主机名
//11000  端口号
//myweb资源路径
//demo.html  资源
//HTTP/1.1  http的协议版本
//785-787  能接收的数据类型
//788 支持的语言
//792 支持的封装型号,服务器发给客户端的数据是压缩过的
//把给客户端的数据先压缩,然后客户端在解压
//793 要访问的主机和端口好(一个地址可以对应多个主机)//获取浏览器发过来的数据的代码//	public static void main(String[] args)throws Exception//	{//		ServerSocket ss = new ServerSocket(11000);//		Socket s = ss.accept();//		System.out.println(s.getInetAddress().getHostAddress());//		InputStream in = s.getInputStream();//		byte[] buf = new byte[1024];//		int len = in.read(buf);//		System.out.println(new String(buf,0,len));//		PrintWriter out = new PrintWriter(s.getOutputStream(),true);//		out.println("<font color = 'blue'  size = '7'> 客户端你好2</font> ");//		s.close();//		ss.close();//	}//模拟浏览器发同样的数据给Tomcat
//200,是响应状态码,代表成功。得出的结果跟浏览器一样,如下图
//	public static void main(String[] args) throws Exception
//	{
//		Socket s = new Socket("192.168.126.1",8080);  //我们没有输入的地方只能写死,浏览器有输入的地方
//		PrintWriter out = new PrintWriter(s.getOutputStream() , true);//按照http的协议格式
//		out.println("GET /myweb/demo.html HTTP/1.1"); //注意不要写多余的空格,否则不符合格式不会接受
//		out.println("Accept: */*");
//		out.println("Accept-Language: zh-cn");
//		out.println("Host: 192.168.126.1:11000");//out.println("Connection:Keep-Alive");  //程序会一直停着,知道超时
//		out.println("Connection:closed") ;//运行完就关闭
//		out.println();//消息体跟数据体要空一行,这里保险就空两行
//		out.println();//按照http的协议格式//		BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));//		String line = null;//		while((line = bufr.readLine()) != null)
//		{
//			System.out.println(line);
//		}
//		s.close();//	}
//}


十八.自定义图形界面浏览器

//这里没有研究。。。。只是照着写了代码(也不知道代码有没有用)
import  java.awt.*;
import  java.awt.event.*;
import  java.io.*;
import  java.net.*;
class  MyIEByGUI
{private  Fram f;private  TextField tf;private 	Button but;private   TextArea ta;private   Dialog d;private   Label lab;private Button 0kBut;MyIEByGUI(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(new FlowLayout());tf = new TextField(60);but = new Button("转到");ta = new TextArea(25,70);d= new Dialog(f,"提示信息-self" , true);d.setBounds(400 , 200 ,240 ,150);d.setLayout(new FlowLayout());lab = new Label();okBut= new Button("确定");d.add(lab);d.add(okBut);d.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}public void myEvent(){okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});tf.addKeyListener(new KeyAdapter(){public void keypressed(KeyEvent e){if(e.getKeyCode() == KeyEvent.VK_ENTER){try{showDir();}catch(Exception ex){}}}});but.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.adWindowListener(new  WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}private void showDir() throws Exception
{ta.setText("");String ur1 = tf.getText(); //http://192.168.1.254:8080/myweb/demo.htmlint index1 = ur1.indexof("//")+2;int index2 = ur1.indexof("/",index1);String str = ur1.substring(index1 , index2);String[] arr = str.split(":");   //用冒号分割String host = arr[0];int port = Integer.parseInt(arr[1]);String path = ur1.substring(index2);//ta.setText(str+”....”+path);Socket s = new Socket(host,port);  //我们没有输入的地方只能写死,浏览器有输入的地方PrintWriter out = new PrintWriter(s.getOutputStream() , true);//按照http的协议格式out.println("GET "+path+" HTTP/1.1");out.println("Accept : */*");out.println("Accept-Language: zh-cn");out.println("Host: 192.168.1.254:11000");//out.println("Connection:Keep-Alive");  //程序会一直停着,知道超时out.println("Connection:closed") ;//运行完就关闭out.println();out.println();//按照http的协议格式BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line = bufr.readLine()) != null){//System.out.println(line);ta.append(line+”\r\n”);}s.close();String dirpath = tf.getText();File dir = new File(dirPath);if(dir.exists()&&dir.idDirectory()){ta.setText(“”);String[] names = dir.list();for(String name :names){ta.append(name+”\r\n”);}else{String info = “您输入的的信息:”+dirPath+”是错误的。请重输”;lab.setText(info);d.setVisible(true);}}public static void main(String[] args){new  MyIEByGUI();}}//}

十九.网络编程URL-URLconnection

类URL 代表一个统一资源定位符,他是指向互联网“资源”的指针,资源可以使简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询
URI跟URL区别是前者范围更大(两者都代表唯一定位符)
import  java.awt.*;
import  java.awt.event.*;
import  java.io.*;
import  java.net.*;
class  MyIEByGUI
{private  Fram f;private  TextField tf;private 	Button but;private   TextArea ta;private   Dialog d;private   Label lab;private Button 0kBut;MyIEByGUI(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(new FlowLayout());tf = new TextField(60);but = new Button("转到");ta = new TextArea(25,70);d= new Dialog(f,"提示信息-self" , true);d.setBounds(400 , 200 ,240 ,150);d.setLayout(new FlowLayout());lab = new Label();okBut= new Button("确定");d.add(lab);d.add(okBut);d.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}public void myEvent(){okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});tf.addKeyListener(new KeyAdapter(){public void keypressed(KeyEvent e){if(e.getKeyCode() == KeyEvent.VK_ENTER){try{showDir();}catch(Exception ex){}}}});but.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.adWindowListener(new  WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}private void showDir() throws Exception{




ta.setText(“”);//简化版(右边(因为蓝色))  跟下面的浏览器有点区别(左边(因为应用层解析))//之前在传输层收到数据全部展示出来,没有拆包//现在传输层传到应用层,应用层的http协议把他能识别的数据解开,把正文显示出来//从键盘输入的到连接String ur1Path= tf.getText(); //http://192.168.1.254:8080/myweb/demo.html//解析服务器发过来的http信息,取出数据体URL url = new URL (urlPath);URLConnection conn = url.openConnection();//解析服务器发过来的http信息,取出数据体//System.out.println(conn);InputStream  in = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);ta.setText(new String(buf,0,len));}//**************************************复杂了,把它简化***************************************//		String ur1 = tf.getText(); //http://192.168.1.254:8080/myweb/demo.html//		int index1 = ur1.indexof(“//”)+2;//		int index2 = ur1.indexof(“/”,index1);//		String str = ur1.substring(index1 , index2);//		String[] arr = str.split(“:”);   //用冒号分割//		String host = arr[0];//		int port = Integer.parseInt(arr[1]);//		String path = ur1.substring(index2);//ta.setText(str+”....”+path);//		Socket s = new Socket(host,port);  //我们没有输入的地方只能写死,浏览器有输入的地方//		PrintWriter out = new PrintWriter(s.getOutputStream() , true);//		//按照http的协议格式 //URLconnection会发出去不用自己写//		out.println(“GET “+path+” HTTP/1.1”);//		out.println(“Accept : */*”);//		out.println(“Accept-Language: zh-cn”);//		out.println(“Host: 192.168.1.254:11000”);//		//out.println(“Connection:Keep-Alive”);  //程序会一直停着,知道超时//		out.println(“Connection:closed”) ;//运行完就关闭//		out.println(“”);//		out.println(“”);//按照http的协议格式////		BufferedReader bufr = //		new BufferedReader(new InputStreamReader(s.getInputStream()));//		String line = null;//		while((line = bufr.readLine()) != null)//		{//		//System.out.println(line);//		ta.append(line+”\r\n”);//		}//		s.close();//********************************************************************}public static void main(String[] args){new  MyIEByGUI();}}}
//但是浏览器是不会打印数据头的
//代码1
import java.net.*;
class URLDemo
{public static void main (String[] args) throws MalformedURLException{//如果绿色的端口号不写那么  getport() = -1URL url = new URL("http://192.168.1.254:8080/myweb/demo.html?name=haha&age=30");System.out.println(“getProtovol():”+url.getProtovol());System.out.println(“getHost():”+url.getHost());System.out.println(“getPort():”+url.getPort());System.out.println(“getPath():”+url.getPath());System.out.println(“getFile():”+url.getFile());System.out.println(“getQuery():”+url.getQuery());//	int port =getPort();
//	if(port == -1) //如果不写8080,port就是-1,我们就给他一个默认的值
//	{
//	port = 80;
//	}}
}//String getFile()
//获取此URL的文件名//String getHost()
//获取此URL的主机名(如果适用)。//String getPath()
//获取此URL的路径部分//int getPort()
//获取此URL的端口号//String  getProtovol()
//获取此URL的协议名称//String  getQuery()
//获取此URL的查询部



//代码2
import  java.net.*;
import  java.io.*;
class  URLConnectionDemo
{public static void main(String[] args)throws Exception{URL  url  = new URL(“http://192.168.1.254:8080/myweb/demo.html”);//public URLConnection openConnection()throws IOException//返回一个URLConnection对象,它表示到URL所引用的远程对象的连接,//每次调用此URL的协议处理程序的openConnection方法都打开一个新的连接//内部封装了连接,不用再连接URLConnection conn = url.openConnection();System.out.println(conn);imputStream in = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf, 0 ,len));}}

二十.网络编程小知识点

Inetaddress  用的是IP之地
InetSocketAddress  用的是IP+端口号
以前都是分开写Socket(InetAddress address , int port)


Server Socket(int port , int backlog);
backlog - 队列的最大长度 (也就是允许连上的客户端数(最大连接数))

二十一.网络编程-域名解析

C:\Windows\System32\drivers\etc可以去这个地方去改变对应关系








这篇关于Java基础(24)网络编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074704

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前