1.TCP单向传输
1.TCP客户端操作步骤
(1)创建客户端Socket对象
public Socket(String host,int port)throws UnknownHostException,IOException
(2)获取客户端所在的通道内字节输出流对象
public OutputStream getOutputStream() throws IOException
(3)写数据到通道的流中
(4)释放资源
public class Tcp_Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("10.12.156.50",10010) ;
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello,TCP,我来了".getBytes());
socket.close() ;
}
}
2.TCP服务端操作步骤
(1)创建服务端ServerSocket对象
public ServerSocket(int port)throws IOException :将指定的端口号绑定在服务器上
(2)监听客户端连接
public Socket accept() throws IOException :返回客户端对象
(3)获取通道内字节输入流
public InputStream getInputStream() throws IOException
(4)读取通道内的数据
(5)展示数据,释放资源
public class Tcp_Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10010) ;
System.out.println("服务器正在等待连接...");
Socket socket = ss.accept();
System.out.println("客户端连接了...");
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024] ;
int len = inputStream.read(bytes);
String msg = new String(bytes,0,len) ;
String ip = socket.getInetAddress().getHostAddress();
System.out.println("data form -->"+ip+"content is--->"+msg);
ss.close();
}
}
2.TCP双向发送
1.客户端读取一个当前项目下的文件,然后服务器端将文件复制到指定的文件中
Tcp_Client.java---复制到D:\EE_2113\day30\code\Copy.java
2.问题: 当加入了服务器反馈的时候,发现---两端都处于互相状态
使用字符缓冲输入流读取文件的结束条件---->null (readLine())
复制的源文件:Tcp_Client.java 已经读完了,但是通道内流不知道文件已经读完了,所以服务器端等待客户端通知
文件已经完毕,同时客户端还要等待服务器端的反馈的数据!
3.解决方案:
1)自定义一个结束条件,"over",如果服务器端读到了这句话,结束了!
弊端:如果文件中第一句话就是"自定义标记值",直接结束了!
2)客户端Socket提供 一个特有的方法
就是通知服务器端,没有流数据过去了!
public void shutdownOutput()throws IOException
代码见:networking_programmin.TCPDemo1
3.TCP实现网络聊天
真实场景:是客户端和客户端聊天,服务器端---->负责 "转发消息"
建立两个工程
客户端工程 chatRoomClient
服务器端工厂
1)简易版:客户单不断发送数据(写),服务器端不断回复数据
客户端展示服务器回复的数据,服务器端接收客户端的发的数据(读)
代码见:networking_programmin.TCP_net_chat