------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! -------
package it.heima.mylog;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPTest {
/* 知识点:TCP协议客户端上传文本 */
public static void main(String[] args) throws Exception {
/* TCP客户端上传文本 */
//TCPUploadClient();
// Client端
TCPClient();
}
public static void TCPUploadClient() throws UnknownHostException,
IOException, FileNotFoundException {
// 上传客户端
System.out.println("上传客户端......");
// 将要上传的文本封装成对象
File file = new File("d:\\client.txt");
// 创建一个Socket端点,必须要明确主机和端口号,要明确建立连接
Socket s = new Socket("192.168.23.1",10005);
// 读取流,关联要上传的文本对象,用缓冲技术装饰读取流
BufferedReader bufr = new BufferedReader(new FileReader(file));
// 从socket对象那得到输出流,PrintWriter将其装饰加强,带自动刷新
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
// 定义一个字符串,用于存储接下来的疯狂读取数据
String line = null;
// 疯狂读取数据,存储在字符串line中,再输出
while ((line = bufr.readLine()) != null) {
out.println(line);
}
// 告诉服务端,哥们读完了数据,数据发完了。
s.shutdownOutput();
// 服务端接收完数据后,应该返回客户端一个消息,表示服务端接收数据成功
// 那么就需要读取服务端的数据,需要读取流Reader,并且是从socket对象中得到的
// Buffered缓冲技术加强装饰下,InputStreamReader字节流转字符流,因为从socket对象中得到的都是字节流。
BufferedReader bufrIn = new BufferedReader(new InputStreamReader(
s.getInputStream()));
// 将读取的字符串存储在str中
String str = bufrIn.readLine();
// 显示在控制台
System.out.println(str);
// 关闭流资源。噢了。
bufr.close();
s.close();
}
public static void TCPClient() throws Exception {
// 创建一个客户端socket。
Socket s = new Socket(InetAddress.getLocalHost().getHostAddress(), 10086);
// 读取客户端要上传的图片。
FileInputStream fis = new FileInputStream("d:\\aa.jpg");
// 获取socket输出流,将读到的图片数据发送到服务端。
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 lenIn = in.read(bufIn);
String text = new String(bufIn, 0, lenIn);
System.out.println(text);
fis.close();
s.close();
}
/*(结合多线程技术并发上传,实现效果)
最常见的客户端:IE浏览
最常见的服务端:Tomcat
网络结构:
1,C/S client/server
好处:
客户端在本地可以分担一部分运算。(很重要,没被淘汰的原因)
缺点:
该结构的软件,客户端和服务端都需要编写开发。成本高,维护较为麻烦。
2,B/S browser/server
好处:
该结构的软件,只需要开发服务端,不需要开发客户端,因为客户端直接由浏览器取代了。
开发成本相对较低,维护更为简单。
缺点:所有运算都在服务端完成。要是360搞个B/S,把本地磁盘全要传到云端杀毒那就废废了。磨叽磨叽。
http(hyper text transport protocol)超文本传输协议。又叫http协议
html(Hypertext Markup Language)超文标记语言*/
}
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! -------