Socket 通信(一)-- 慕课网教程

Socket 通信(一)-- 慕课网教程


什么是Socket?


网络中的进程间是通过socket来通信的。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。


SOCKET连接与TCP/IP连接


创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP)。

当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

Socket接口 是TCP/IP网络的API,Socket接口定义了许多函数或例程(listen/connect/read/write/),程序员可以用它们来开发TCP/IP网络上的应用程序,即为socket编程。

SOCKET是API,而TCP/UPD是通信协议,两种根本不同的东西。


Socket编程实例





服务端具体代码示例如下:


public class Server {
	public static void main(String[] args) {
		ServerSocket server=null;
		try {
			//1.创建一个服务器端socket,即ServerSocket,绑定指定的端口,并监听此端口
			server=new ServerSocket(8888);
			System.out.println("***服务器端启动,等待客户端的连接***");
			//2.调用accept()方法开始监听,等待客户端的连接
			Socket socket=server.accept();
			//3.获取输入流,读取客户端信息
			InputStream is=socket.getInputStream();//字节流
			InputStreamReader isr=new InputStreamReader(is);//提高读取效率,将其转化为字符流
			BufferedReader br=new BufferedReader(isr);//为输入流添加缓冲
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println("我是服务端,客户端说"+info);//循环读取客户端信息
			}
			socket.shutdownInput();//关闭输入流
			//4.获取输出流,响应客户端信息
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.write("欢迎您");
			pw.flush();
			socket.shutdownOutput();
			//5.关闭相关资源
			pw.close();
			os.close();
			br.close();
			isr.close();
			is.close();
			socket.close();
			server.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



服务端具体代码示例如下:


public class Client {
	public static void main(String[] args) {
		try {
			//1.创建一个客户端socket,制定地址和端口
			Socket client=new Socket("localhost", 8888);
			//2.获取输出流,向服务器发送信息
			OutputStream os=client.getOutputStream();//字节输出流
			PrintWriter pw=new PrintWriter(os);//将字节流包装为打印流
			pw.write("用户名为:admin,密码为:123");
			pw.flush();
			client.shutdownOutput();
			//3.获取输入流,输出客户端响应信息
			InputStream is=client.getInputStream();
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println("我是客户端,服务端说"+info);//循环读取服务端响应信息
			}
			client.shutdownInput();//关闭输入流
			//4.关闭相关资源
			br.close();
			isr.close();
			is.close();
			pw.close();
			os.close();
			client.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

先启动server端,效果如下:




再启动client端。server端响应如下:




将控制台切换至客户端,响应如下:






至此,一个最基本的Socket通信实例就完成啦。要想实现服务端响应多个客户端消息,欢迎阅读我的下一篇博客点击打开链接









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值