java实现基于TCP形式的socket编程示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36940806/article/details/85367817

一,介绍

socket编程也叫套接字编程是位于应用层,一台机器上的Socket与另一台机器上的Socket联接就会创建一条通信通道。Java语言通过流为代码提供数据,从而隐藏了所有这些细节,所以被称为流套接字。套接字有两种形式:a.TCP:可靠的,端到端的字节流通信协议。是一种面向连接的协议。b.UDP:UDP提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,是一种不可靠的连接。

二,TCP Socket 编程示例

客户端端代码 

package tcpsocket;

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

public class Client {

	public static void main(String[] args) {
		// 客户端参考代码
		try {
			// 1.创建一个socket对象(指定服务器IP,端口号)
			Socket socket = new Socket("localhost", 8000);
			// 2.获取输出流,用来写出数据,而写出的数据就通过网络发送给服务端了。
			OutputStream os = socket.getOutputStream();
			String info = "用户名:TOM,密码:1234";
			os.write(info.getBytes());
			os.flush();
			// 3单向关闭输出流
			// socket.shutdownOutput();
			// 4.获取输入流,用来接收数据
			InputStream is = socket.getInputStream();
			byte[] b = new byte[1024];
			int len = is.read(b);
			System.out.println("客户端接收:" + new String(b, 0, len));

			// 5.关闭流
			os.close();
			is.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

服务器端代码

package tcpsocket;

import java.io.IOException;
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) {
		try {
			/*
			 * 运行在服务端的Socket
			 * 作用是:申请服务端口,客户端就是通过它申请的服务端口连接上服务端应用程序的
			 *         
			 */
			ServerSocket serversocket = new ServerSocket(8000);
			// 2.监听客户端请求
			System.out.println("服务器正在等待连接....");
			/*
			 * ServerSocket.accept()作用:      
			 * 该方法是一个阻塞方法,用于监听其打开的8000端口,当一个客户端通过该端口与       
			 * 服务端连接时,accept方法就会解除阻塞,然后创建一个Socket实例并返回。这个    
			 * Socket的作用就是与刚刚连上的客户端进行通讯。         
			 */
			Socket socket = serversocket.accept();
			// 3.打开输入流,接收数据
			InputStream is = socket.getInputStream();
			byte[] b = new byte[1024];
			int len = is.read(b);
			System.out.println("服务器接收:" + new String(b, 0, len));
			// 4.单向关闭输入流
			// socket.shutdownInput();
			// 5.打开输出流,发送数据
			OutputStream os = socket.getOutputStream();
			String info = "欢迎您,登录成功!";
			os.write(info.getBytes());
			os.flush();
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			// 6.关闭资源
			is.close();
			os.close();
			socket.close();
			serversocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

三,运行结果

先运行服务器端 Server

再运行客户端 Client

扫描二维码关注公众号,回复: 4901970 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_36940806/article/details/85367817