本文主要是介绍【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
练习一:客户端把图片上传到服务器,服务器返回信息
/*
需求:上传图片。
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。*/import java.io.*;
import java.net.*;
class PicClient
{public static void main(String[] args)throws Exception{Socket s = new Socket("192.168.1.254",10007);FileInputStream fis = new FileInputStream("c:\\1.bmp");OutputStream out = s.getOutputStream();byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){out.write(buf,0,len);}//告诉服务端数据已写完s.shutdownOutput();InputStream in = s.getInputStream();byte[] bufIn = new byte[1024];int num = in.read(bufIn);System.out.println(newString(bufIn,0,num));fis.close();s.close();}
}/*
服务端
*/
class PicServer
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10007);Socket s = ss.accept();InputStream in = s.getInputStream();FileOutputStream fos = new FileOutputStream("server.bmp");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());fos.close();s.close();ss.close();}
}
练习二:服务端开启多个线程完成多个客户端的迸发访问请求,并且在传文件前先判断文件是否符合服务器要求
/*
需求:上传图片。*/
/*
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。*/import java.io.*;
import java.net.*;
class PicClient
{public static void main(String[] args)throws Exception{if(args.length!=1){System.out.println("请选择一个jpg格式的图片");return;}File file = new File(args[0]);if(!(file.exists()&& file.isFile())){System.out.println("该文件有问题,要么补存在,要么不是文件");return;}if(!file.getName().endsWith(".jpg")){System.out.println("图片格式错误,请重新选择");return;}if(file.length()>1024*1024*5){System.out.println("文件过大,没安好心");return;}Socket s = new Socket("192.168.1.254",10007);FileInputStream fis = new FileInputStream(file);OutputStream out = s.getOutputStream();byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){out.write(buf,0,len);}//告诉服务端数据已写完s.shutdownOutput();InputStreamin = s.getInputStream();byte[]bufIn = new byte[1024];intnum = in.read(bufIn);System.out.println(newString(bufIn,0,num));fis.close();s.close();}
}/*
服务端这个服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,还有循环回来执行下次accept方法。所以
暂时获取不到B客户端对象。那么为了可以让多个客户端同时并发访问服务端。
那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。如何定义线程呢?只要明确了每一个客户端要在服务端执行的代码即可。将该代码存入run方法中。
*/class PicThread implements Runnable
{private Socket s;PicThread(Sockets){this.s= s;}public void run(){int count = 1;String ip =s.getInetAddress().getHostAddress();try{System.out.println(ip+"....connected");InputStreamin = s.getInputStream();Filedir = new File("d:\\pic");Filefile = new File(dir,ip+"("+(count)+")"+".jpg");while(file.exists())file= new File(dir,ip+"("+(count++)+")"+".jpg");FileOutputStreamfos = new FileOutputStream(file);byte[]buf = new byte[1024];intlen = 0;while((len=in.read(buf))!=-1){fos.write(buf,0,len);}OutputStreamout = s.getOutputStream();out.write("上传成功".getBytes());fos.close();s.close();}catch(Exception e){thrownew RuntimeException(ip+"上传失败");}}
}class PicServer
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10007);while(true){Socket s = ss.accept();new Thread(new PicThread(s)).start();}//ss.close();}
}
练习三:自定义一个IE浏览器(只有Socket传输功能,没有解析功能)
用GUI图形化界面仿制一个IE浏览器
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class MyIEByGUI
{private Frame f;private TextField tf;private Button but;private TextArea ta;private Dialog d;private Label lab;private Button okBut;MyIEByGUI(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(newFlowLayout());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(newFlowLayout());lab= new Label();okBut= new Button("确定");d.add(lab);d.add(okBut);f.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}private 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(newKeyAdapter(){public void keyPressed(KeyEvent e){try{if(e.getKeyCode()==KeyEvent.VK_ENTER)showDir();}catch(Exception ex){}}});but.addActionListener(newActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.addWindowListener(newWindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0); }});}private void showDir()throws Exception{ta.setText("");String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.htmlint index1 = url.indexOf("//")+2;int index2 = url.indexOf("/",index1);String str = url.substring(index1,index2);String[] arr = str.split(":");String host = arr[0];int port = Integer.parseInt(arr[1]);String path = url.substring(index2);//ta.setText(str+"...."+path);Socket s = new Socket(host,port);PrintWriter out = new PrintWriter(s.getOutputStream(),true);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:closed");out.println();out.println();BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line=bufr.readLine())!=null){ta.append(line+"\r\n");}s.close();}public static void main(String[] args){new MyIEByGUI();}
}
练习四:用GUI图形化界面仿制一个IE浏览器
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class MyIEByGUI2
{private Frame f;private TextField tf;private Button but;private TextArea ta;private Dialog d;private Label lab;private Button okBut;MyIEByGUI2(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(newFlowLayout());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(newFlowLayout());lab = new Label();okBut = new Button("确定");d.add(lab);d.add(okBut);f.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}private 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(newKeyAdapter(){public void keyPressed(KeyEvent e){try{if(e.getKeyCode()==KeyEvent.VK_ENTER)showDir();}catch(Exception ex){}}});but.addActionListener(newActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.addWindowListener(newWindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0); }});}private void showDir()throws Exception{ta.setText("");String urlPath = tf.getText();//http://192.168.1.254:8080/myweb/demo.htmlURL url = new URL(urlPath);URLConnection conn = url.openConnection();InputStreamin = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);ta.setText(newString(buf,0,len));}public static void main(String[] args){new MyIEByGUI2();}
}
这篇关于【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!