Socket 通信入门

倾然丶 夕夏残阳落幕 提交于 2019-11-30 12:32:03


一、Socket套接字

  • 网络上的两个程序通过一个双向的通信您连接实现数据交换,这个连接的一端称为一个socket。
  • java中使用socket完成TCP程序的开发,使用此类方法可以方便的建立可靠地,双向的,持续性的,点对点得通讯连接
  • 在socket的程序开发中,服务器端使用ServerSocket等待客户端的连接,对于java的网络程序来说,每一个客户端都是用一个socket对象表示。

二、代码示例

2.1 完成一次服务端与客户端通信

  • 用本机的当做服务器与客户端进行通信。
  • 服务端等待客户端的连接,在客户端连接后发送数据给客户端。

Server

package com.rrs.socketserver;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

/**
 * @author lzx
 * on 2019/9/25.
 */
public class SocketServer {

	@Test
	public void test01() throws IOException {

		System.out.println("socket server start...");
		ServerSocket serverSocket = new ServerSocket(8888);

		Socket socket = serverSocket.accept();
		System.out.println("检测到客户端socket:" + socket);

		OutputStream out = socket.getOutputStream();

		String mString = "Hello Client";
		byte[] bytes = mString.getBytes();

		out.write(bytes);

		socket.shutdownOutput();
		out.close();

	}

}

Client

package com.rrs.sockerclient;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.SocketAddress;

/**
 * Created by lzx on 2019/9/25.
 */
public class SocketClient {


    public static void main(String[] args) throws IOException {

        System.out.println("socket client start...");
        Socket socketClient = null;


        socketClient = new Socket("127.0.0.1", 8888);
        InputStream in = socketClient.getInputStream();
        byte[] bytes = new byte[1024];

        int len = in.read(bytes);

        String msg = new String(bytes, 0, len);

        System.out.println(msg);
    }

}

2.2 完成客户端到服务端图片传输

Server 服务端等待客户端发送图片

package com.rrs.socketserver.server;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

/**
 * @author lzx
 *
 */
public class ServerPic {

	@Test
	public void serverPic() throws IOException {

		System.out.println("server start...");

		// 创建socket
		ServerSocket server = new ServerSocket(8899);

		// 阻塞式监听客户端
		Socket socket = server.accept();

		// 获得输入流
		InputStream in = socket.getInputStream();

		byte[] buf = new byte[1024];
		int len = 0;

		// 边读边写
		// 写到服务端磁盘上

		// 获得文件输出流
		File file = new File("java.jpg");
		FileOutputStream out = new FileOutputStream(file);

		while ((len = in.read(buf)) != -1) {

			out.write(buf, 0, len);
		}

		System.out.println("图片接受完毕...");
		
		socket.shutdownInput();
		in.close();
		out.close();
		

	}

}

Client 客户端发送图片

package com.rrs.socketserver.client;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

import org.junit.Test;

/**
 * @author lzx
 *
 */
public class ClientPic {

	@Test
	public void clientPic() throws IOException {

		System.out.println("client start...");

		// 创建socket客户端
		Socket client = new Socket("127.0.0.1", 8899);

		// 从本地读取文件发送文件(边读边写)

		// 读取文件
		File file = new File("D:/Desktop/java.jpg");
		FileInputStream in = new FileInputStream(file);

		// 每次发送1k
		byte[] buf = new byte[1024];

		int len = 0;

		OutputStream out = client.getOutputStream();

		while ((len = in.read(buf)) != -1) {
			out.write(buf, 0, len);
		}
		System.out.println("图片发送完成...");

		out.close();
		in.close();
		client.shutdownOutput();

	}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!