赞
踩
先来描述一下 TCP的发送数据的步骤,TCP的接收数据步骤
1.创建客户端的Socket对象(Socket)
2.获取输出流,写数据
3.释放资源
1.创建服务器端的Socket对象(ServerSocket)
2.获取输入流,读取数据,并把数据显示在数据台
3.释放资源
字节流
字节输出流: OutputStream\n" +
字节输入流: InputStream\n" +
package demo26; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; //TCP发送数据的步骤: // 1.创建客户端的Socket对象(Socket) // 2.获取输出流,写数据 // 3.释放资源 public class ClientDemo { public static void main(String[] args) throws UnknownHostException, IOException { // 里面的127.0.0.1 这里可以填写自己主机的IP地址或主机名称,其他人的也可以,其中返回的是一个字节流。 Socket s = new Socket("127.0.0.1",41231); //客户端向服务器发送内容 OutputStream os=s.getOutputStream(); //字节 os.write("java ,我来了".getBytes()); //接收服务器的反馈 InputStream is = s.getInputStream(); //创建字节数组进行来接收服务器的回应 byte[] by = new byte[1024]; int len = is.read(by); String data = new String (by,0,len); System.out.println("客户端:"+data); s.close(); } }
package demo26; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream.GetField; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; //TCP接收数据的步骤: // 1.创建服务器端的Socket对象(ServerSocket) // 2.获取输入流,读取数据,并把数据显示在数据台 // 3.释放资源 public class ServerDemo { public static void main(String[] args) throws IOException { ServerSocket ss=new ServerSocket(41231); Socket s =ss.accept(); InputStream is = s.getInputStream(); byte[] by = new byte[1024]; int len = is.read(by); String data= new String(by,0,len); System.out.println("服务器:"+data); //对客户端进行回应 OutputStream os=s.getOutputStream(); os.write("数据已经收到:".getBytes()); ss.close(); } }
我们期望的是将TCP.txt中的内容通过客户端发送服务端通过字符写在TCP2.txt中。
里面的内容是
package demo26; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import demo15.system; public class ClientDemo3 { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("192.168.223.1",41231); BufferedReader br = new BufferedReader(new FileReader("TCP.txt")); // 封装写字符串数据 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line; while ((line=br.readLine())!=null) { if (line.equals("886")){ break; } else { bw.write(line); bw.newLine(); bw.flush(); } } //这里注意如果没有这个条件服务端将一直等待客户端的发送数据,而在等待客户端。 // 自定义结束标记 bw.write("886"); bw.newLine(); bw.flush(); // 接收反馈 BufferedReader br2= new BufferedReader(new InputStreamReader(s.getInputStream())); String data = br2.readLine(); System.out.println("服务器的反馈:"+data); br.close(); s.close(); } }
在服务器里面我们要结合线程,来接收客户端
package demo26; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo3 { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(41231); while(true) { Socket s = ss.accept(); new Thread(new ServerThread(s)).start(); } } }
package demo26; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class ServerThread implements Runnable { private Socket s; public ServerThread(Socket s) { this.s=s; } @Override public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw = new BufferedWriter(new FileWriter("TCP2.txt")); String line; while ((line = br.readLine()) != null) { if (line.equals("886")) { break; } System.out.println(line); bw.write(line); bw.newLine(); bw.flush(); } BufferedWriter br2 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); br2.write("文件上传成功"); br2.newLine(); br2.flush(); bw.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。