349 TCP通信程序练习1(服务器给出反馈)
【练习1】
客户端,os发送数据,is接收服务器反馈
服务器,is接收数据,os给出反馈
——客户发,服务器接,返回反馈
【练习2】
客户端,数据来自键盘录入,直到输入886,则发送数据结束
服务器,接收数据,写屏
——客户录入然后发,多次发直至886,服务器接并显示
【练习3】
客户端,数据来自键盘录入,直到输入886,则发送数据结束(与2同)
服务端,接收到的数据写入文本文件
——客户录入然后发,多次发直至886,服务器接并写文件
【练习4】
客户端,数据来自文本文件
服务端,接收到的数据写入文本文件(与4同)
【练习5】
客户端,数据来自文本文件,接收服务器反馈
服务端,接收到的数据写入文本文件,给出反馈
【练习6】
客户端,数据来自文本文件,接收服务器反馈(与5同)
服务端,接收到的数据写入文本文件,给出反馈,用线程封装代码,为每一个客户端开启一个线程
【代码思路】
- 创建Socket需要2个参数:(双引号)主机IP、端口号,创建完有异常,这里先抛出去。
- 接下来获取输出流,s.getOutputStream生成左边内容,
- os.write写数据,参数是一个字符串,就是要发送、接收的数据
- 下面要接收服务器的反馈,s.getInputStream,生成左边内容
- 读数据:new一个数组,长度1024。声明个int变量,用is.read赋值。new一个String对象,参数是数组、迁移量0、变量
- 把发送、接收的数据写屏
- 释放资源时,只要释放s就可以了,因为is、os都是根据s创建的。
- 分析,这次的代码中,写完输入流没有马上释放资源,而是要写代码接收服务器的反馈。
- 最后,释放资源。
- 客户端写完后,现在开始写服务器端。
- 给反馈就是写数据
- (在最近的几节课里,意识里没有IO流架构而半懵,视频里写得依然飞快。单纯抄写原代码则更加懵,只好借助抄写音频原文帮助理解。)
---------------------------------------------
package TCPPra1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端的Socket对象-Socket
Socket s=new Socket("192.168.43.241",10086);
//获取输出流,写数据
OutputStream os=s.getOutputStream();
os.write("hello,TCP.".getBytes());
//接收服务器反馈
InputStream is=s.getInputStream();
byte[] bys=new byte[1024];
int len=is.read(bys);
String data=new String(bys,0,len);
System.out.println("CLIENT: "+data);
//释放资源
// is.close();
// os.close();
s.close();
}
}
//CLIENT: GOT IT.
---------------------------------------------
package TCPPra1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
//创建服务器端的Socket对象-ServerSocket
ServerSocket ss = new ServerSocket(10086);
//监听客户端连接,返回一个Socket对象
Socket s = ss.accept();
//获取输入流,读数据,并把数据显示在控制台
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
String data = new String(bys, 0, len);
System.out.println("DATA is: " + data);
//给出反馈
OutputStream os = s.getOutputStream();
os.write("GOT IT.".getBytes());
//释放资源
// s.close();
ss.close();
}
}
//DATA is: hello,TCP.