---------------------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培训、期待与您交流! --------------------