快速掌握Java中的Socket(TCP/IP)

概要:

所谓socket通常也称作"套接字",用于描述IP地址和端口,应用程序通常通过"套接字"向网络发出请求或者应答网络请求,通常使用TCP和UDP两种协议。

TCP是一种面向连接的、可靠的、基于IP的传输层协议,  想传送数据必须建立连接,建立连接时必须通过3次握手,最后得到的是一个顺序的无差错的数据流。

| |目录

服务端程序

package com.zhenzhigu.socket;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(9987);
		System.out.println("服务器准备就绪...");
		
		//等待客户端连入,soc用来接收连入的客户端
		Socket soc = server.accept();
		
		//从soc中获取输入流,输入流可以从外界向当前程序传入数据
		//从soc中获取输出流,输出流可以从当前程序中向外界输出数据
		InputStream in = soc.getInputStream();
		OutputStream out = soc.getOutputStream();
		
		//在out与in的基础上创建过滤流,它比普通的节点流更方便使用
		DataInputStream dis = new DataInputStream(in);
		
		String str = dis.readUTF();//从输入流中接收字符串
		System.out.println("接收到客户端消息:"+str);//打印接收到的内容
	}
}


客户端程序

package com.zhenzhigu.socket;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
	public static void main(String[] args) throws Exception {
		Socket sc = new Socket("127.0.0.1",9987);
		System.out.println("成功连接至服务器");
		
		//从sc中获取输入流,输入流可以从外界向当前程序传入数据
		//从sc中获取输出流,输出流可以从当前程序中向外界输出数据
		InputStream in = sc.getInputStream();
		OutputStream out = sc.getOutputStream();
		
		//在out与in的基础上创建过滤流,它比普通的节点流更方便使用
		DataOutputStream dos = new DataOutputStream(out);
		String str = "你好,服务器,我是客户端。";//将要发送的内容
		dos.writeUTF(str);//使用输出流向服务端发送字符串str
		
		
	}
}


程序解读

服务端程序启动成功后会有一个ServerSocket对象在9987端口建立监听,在向控制台输出"准备就绪"后,就会停留在server.accept();这句,这是等待客户端连入的方法,程序会卡在这里,直到有客户端连接为止,客户端连接后,会被soc接收,此时soc中的信息为客户端的信息,接下来从soc中获取输入输出流,通过输入流等待接收来自客户端的信息。


客户端启动后,sc对象会向指定ip的指定端口发起连接请求,连接成功则程序继续往下走,会输出"成功连接",接下来从sc中获得输入输出流,用输出流向服务端发送一句话。


实例代码中只演示了从客户端向服务端发送,如果想让服务端给客户端一个回复也是很简单的,输入流与输出流都在那里,略加发挥就可以了。

评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
  • 全部评论(0)
资料加载中...
已关注 , 取消