黑马程序员-网络编程TCP练习(客户端)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值