- Tcp协议发送数据
- 当使用tcp发送数据的时候 必须的有服务器端,当第一次执行客户端代码会报如下错误
- java.net.ConnectException: Connection refused: connect
- 连接被拒绝
- Socket和ServerSocket
- 建立客户端和服务器端
- 建立连接后,通过Socket中的IO流进行数据的传输
- 关闭socket
- 同样,客户端与服务器端是两个独立的应用程序。
- 代码实现
- [1]客户端代码
- 建立客户端的Socket服务,并明确要连接的服务器。
- 如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
- 通过Socket对象的方法,可以获取这两个流
- 通过流的对象可以对数据进行传输
- 如果传输数据完毕,关闭资源
- [1]客户端代码
- 当使用tcp发送数据的时候 必须的有服务器端,当第一次执行客户端代码会报如下错误
public class send { public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 8888); String str = "你好,南宫燚滨!"; byte[] buf = str.getBytes(); int length = buf.length; socket.getOutputStream().write(buf); socket.close(); }}
-
-
- [2]服务器代码
- 建立服务器端的socket服务,需要一个端口
- 服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信
- 通过客户端的获取流对象的方法,读取数据或者写入数据
- 如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的
- [2]服务器代码
-
public class receive { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(8888); Socket socket = ss.accept(); InputStream is = socket.getInputStream(); byte[] buf = new byte[1024]; int length = 0; while ((length = is.read(buf)) != -1) { System.out.println(new String(buf)); } }}
- 客户端发送数据数据来自键盘录入
public class send { public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 8888); Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String str = scanner.nextLine(); if (str.equals("886")) { socket.close(); return; } byte[] buf = str.getBytes(); int length = buf.length; socket.getOutputStream().write(buf); } }}
- 文件上传核心逻辑
- 朋友圈,百度网盘 360云盘.邮箱–>上传附件
- 代码实现:
- [1]客户端代码
- 朋友圈,百度网盘 360云盘.邮箱–>上传附件
public class send { public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 9999); FileInputStream fis = new FileInputStream("abcd.txt"); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { socket.getOutputStream().write(buf, 0, len); } fis.close(); socket.close(); }}
-
-
- [2]服务器代码
-
public class receive { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(9999); Socket socket = ss.accept(); InputStream is = socket.getInputStream(); FileOutputStream fos = new FileOutputStream("abc.txt"); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { fos.write(buf, 0, len); } fos.close(); ss.close(); }}
- 总结 :客户端上传的是什么文件类型 服务器接收的就应该是什么格式.
- udp:datagramSocket DatagramPacket
- tcp :socket serversockete