---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. 上传图片
1.单上传图片
客户端:
步骤:1.定义客户端服务,并且指定目标主机和端口
2.定义读取字节流,用来读取图片。
3.获得客户端的字节输出流,把数据通过网络传给服务端。
4.获得客户端的字节输入流,用来获得服务端的反馈信息。
5.关闭客户端资源。
package www.fuxi.wangluo1; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端, * */ public class TcpPhotoClient { public static void main(String[] s) throws Exception { /** * 客户端服务,指定了目标主机和端口号 */ Socket client = new Socket("192.168.1.101", 20000); /** * 字节读取流,用来读取要上传的图片 */ FileInputStream in = new FileInputStream("1.jpg"); /** * 客户端的字节输出流,把要上传的通过网络传给服务器 */ OutputStream CilentOut = client.getOutputStream(); byte bu[] = new byte[1024]; int len = 0; while ((len = in.read(bu)) != -1) {//读 CilentOut.write(bu, 0, len);//写 } client.shutdownOutput();// 输入结束 /** * 读取客户端传给的信息 */ InputStream ClientIn = client.getInputStream(); byte b[] = new byte[1024]; int pl = ClientIn.read(b); System.out.println(new String(b, 0, pl)); client.close(); } }
服务端:
步骤:1.定义服务端服务,指定端口号。
2.获得从客户端的服务对象,从而获得字节读取流,读取从客户端传的信息。
3. 定义写入字节流,把客户端的传给的信息写入到此流中。
4.获得客户端的字节写入流,反馈给客户端信息。
package www.fuxi.wangluo1; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * 服务端 * @author yang */ public class TcpPhotoServer { public static void main(String[] s) throws Exception { /** * 定义服务器端,指定端口,并且获得客户端服务对象 */ ServerSocket server = new ServerSocket(20000); Socket scoket = server.accept(); String ip=scoket.getLocalAddress().toString(); System.out.println(); /** * 字节写入流,用来把数据写入到指定的图片中 */ FileOutputStream writer = new FileOutputStream("server.jpg"); /** * 获得客户端的读取流,读取传输的文件 */ InputStream ServerInput = scoket.getInputStream(); byte[] re = new byte[1024]; int len = 0; while ((len = ServerInput.read(re)) != -1) { writer.write(re,0, len); } /** * 获得客户端的写入流,反馈给客户端信息 */ OutputStream ServerOut = scoket.getOutputStream(); byte[] out = "上传成功".getBytes(); ServerOut.write(out, 0, out.length); server.close(); } }
要先启动服务端,然后在启动客户端,否则会是链接不上。
2.客户端并发上传
使用多线程来操作,把服务端每个公共执行的存到线程中。
客户端
importjava.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * 客户端,也可以对文件的格式和大小进行限制 * 就是读取文件的大小和名字进行判断,然后根据结果进行设置,这里就不过多操作的。 */ public class TcpPhotoClient { public static void main(String[] s) throws Exception { /** * 客户端服务,指定了目标主机和端口号 */ Socket client = new Socket("192.168.1.101", 20000); /** * 字节读取流,用来读取要上传的图片 */ FileInputStream in = new FileInputStream("1.jpg"); /** * 客户端的字节输出流,把要上传的通过网络传给服务器 */ OutputStream CilentOut = client.getOutputStream(); byte bu[] = new byte[1024]; int len = 0; while ((len = in.read(bu)) != -1) {//读 CilentOut.write(bu, 0, len);//写 } client.shutdownOutput();// 输入结束 /** * 读取客户端传给的信息 */ InputStream ClientIn = client.getInputStream(); byte b[] = new byte[1024]; int pl = ClientIn.read(b); System.out.println(new String(b, 0, pl)); client.close(); } }
服务端
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * 服务线程类 * * @author yang */ public class TcpServer implements Runnable { private Socket scoket; public TcpServer(Socket scoket) { this.scoket = scoket; } public void run() { String ip = scoket.getLocalAddress().getHostAddress(); try { int count = 0; File file = new File(ip + ".jpg"); while (file.exists()) { file = new File(ip + "(" + (count++) + ").jpg"); } /** * 字节写入流,用来把数据写入到指定的图片中 */ FileOutputStream writer = new FileOutputStream(file); /** * 获得客户端的读取流,读取传输的文件 */ InputStream ServerInput = scoket.getInputStream(); byte[] re = new byte[1024]; int len = 0; while ((len = ServerInput.read(re)) != -1) { writer.write(re, 0, len); } /** * 获得客户端的写入流,反馈给客户端信息 */ OutputStream ServerOut = scoket.getOutputStream(); byte[] out = (ip + "上传成功").getBytes(); ServerOut.write(out, 0, out.length); scoket.close(); } catch (Exception e) { e.printStackTrace(); } } }
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * 服务端 * * @author yang */ public class TcpPhotoServer { public static void main(String[] s) throws Exception { /** * 定义服务器端,指定端口,并且获得客户端服务对象 */ ServerSocket server = new ServerSocket(20000); while (true) { Socket scoket = server.accept(); new Thread(newTcpServer(scoket)).start(); } } }
2. 客户端并发登录
客户端:
步骤:1.定义客户端的服务和端口。
2.要定义键盘录入的流和客户端的输出流。
2.键盘循环录入,限制三次,每登录一次都要由服务端判断,根据返回的信息判断是否继续尝试登录。
3.当三次都没有登录成功,那么就不能继续登录。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 * @author yang * */ public class ClientLogin { public static void main(String[] s) throws UnknownHostException, IOException { Socket socket = new Socket("192.168.1.101", 10020); BufferedReader bufRe = new BufferedReader(new InputStreamReader( System.in));// 读取键盘数据 /** * 获得客户端的输出流,并且封装到打印流中 */ PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); /** * 获得客户端的输入流,获得服务端的反馈信息 */ BufferedReader readSer = new BufferedReader(new InputStreamReader( socket.getInputStream())); for (int i = 0; i < 3; i++) { String line = bufRe.readLine(); if (line == null) break; writer.println(line); String replay = readSer.readLine(); System.out.println(replay); if (replay.contains("欢迎")) { break; } } socket.close(); } }
服务端:
步骤:1.定义服务端的服务并指定端口
2.获得客户端服务对象,利用其流对象对获得传输过来的信息和反馈信息。
3.对存储登录信息的文件进行读取,并且对其和客户端穿过来的信息进行比较。
4.限制循环次数为3次。
package www.fuxi.wangluo1; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; /** * 服务线程 */ public class UserRun implements Runnable { private Socket s; public UserRun(Socket s) { this.s = s; } public void run() { String ip = s.getInetAddress().getHostAddress(); System.out.println(ip + ".....contion"); try { for (int i = 0; i < 3; i++) { /** * 定义读取存储登录用户信息的文件流 */ FileReader reader = new FileReader("User.txt"); BufferedReader bufInfo = new BufferedReader(reader); /** * 获得客户端的读取流,读取传输过来的信息 */ BufferedReader bufR = new BufferedReader(new InputStreamReader( s.getInputStream())); /** * 获得客户端的写入流,把反馈信息反馈给客户端 */ PrintWriter writer = new PrintWriter(s.getOutputStream()); String name = bufR.readLine(); if (name.equals(null)) break; boolean f = false; String line = null; while ((line = bufInfo.readLine()) != null) { if (line.equals(name)) { f = true; break; } } if (f) { writer.println(name + "欢迎您!"); break; } else { writer.println(name + "尝试登录!"); } s.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package www.fuxi.wangluo1; import java.net.ServerSocket; import java.net.Socket; /** * 服务端 * @author yang */ public class ServerDeal { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(10020); while (true) { Socket socket = server.accept(); new Thread(new UserRun(socket)).start(); } } }
3. 浏览器-自定义服务器
客户端:浏览器
服务端:自定义的服务器
import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class ServerText { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(20000); while (true) { Socket socket = server.accept(); String ip = socket.getInetAddress().getHostAddress(); PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); System.out.println(ip); writer.println("欢迎您" + ip); writer.close(); } } }
4. 自定义浏览器(GUI)
客户端:自定义的浏览器
服务端:tomact服务器
首先要把tomcat启动,然后把你要发送文件部署到tomcat服务器上。然后使用自定义的浏览器访问。
使用URL和URLConnection对象。
package www.fuxi.wangluo1; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import www.fuxi.GUI.DirDemo; public class MyIEGUI { private Frame ff;// 窗体 private TextField text;// 文本框 private Button bu;// Button private TextArea area;// 文本区域 public MyIEGUI() { init(); } /* 初始化方法 */ public void init() { /* 窗体设置 */ ff = new Frame("MyIE"); ff.setSize(400,500);// 设置大小 ff.setLocation(300,200);// 设置位置 ff.setLayout(new FlowLayout());// 设置布局 /* TextField设置 */ text = new TextField(40);// 初始化的时候指定列 ff.add(text);// 添加到窗体上 /* Button设置 */ bu = new Button("转到"); ff.add(bu);// 添加到窗体上 /* TextArea 设置 */ area = new TextArea(20, 50); ff.add(area);// 添加到窗体上 myEvent(); ff.setVisible(true);// 设置显示 } /* 监听器和事件 */ public void myEvent() { /* 设置窗体监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {// 关闭事件 System.out.println("窗体关闭"); System.exit(0); } }); /* 设置Button的监听器 */ bu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {// 活动事件 showContent(); } }); /* 对文本框设置键盘监听器,当点击回车后,和Button的功能一样 */ text.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) {// 按下事件 if (e.getKeyCode() == KeyEvent.VK_ENTER) showContent(); } }); } /* 把查看目录内容功能抽取出来,可以是用键盘监听器事件调用,也可以Button监听 * 显示内容方法*/ private void showContent() { area.setText(""); try { URL url = new URL(text.getText());//获得URL对象 URLConnection conn = url.openConnection();//链接对象,这就不用使用Socket了 //System.out.println(conn); InputStream in= conn.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String str=new String(buf, 0, len); System.out.println(str); area.setText(str); } catch (Exception e) { e.printStackTrace(); } //URL url = newURL("http://192.168.1.101:8088/myweb/index.html"); /* * System.out.println(url.getProtocol()); *System.out.println(url.getHost()); System.out.println(url.getPath()); *System.out.println(url.getPort()); *System.out.println(url.getQuery()); */ } public static void main(String[] args) { new MyIEGUI(); } }
---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
--------------------