套 接 字 →

一、套接字是源IP地址和目的IP地址以及源端口号和目的端口号的组合,一般用于标识客户端请求的服务器和服务,是支持TCP/IP的网络通信的基本操作单元。

socket对象建立连接,打开套接字。

 

非常经典的socket连接代码:

 

 

客户端代码如下: 

<span style="font-size:18px;"><strong>package zyb.org.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class Client1 {
	public static void main(String[] args) throws IOException {
		//客户端请求与本机在20006端口建立TCP连接 
		Socket client = new Socket("127.0.0.1", 20006);
		client.setSoTimeout(10000);
		//获取键盘输入 
		BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
		//获取Socket的输出流,用来发送数据到服务端  
		PrintStream out = new PrintStream(client.getOutputStream());
		//获取Socket的输入流,用来接收从服务端发送过来的数据  
		BufferedReader buf =  new BufferedReader(new InputStreamReader(client.getInputStream()));
		boolean flag = true;
		while(flag){
			System.out.print("输入信息:");
			String str = input.readLine();
			//发送数据到服务端  
			out.println(str);
			if("bye".equals(str)){
				flag = false;
			}else{
				try{
					//从服务器端接收数据有个时间限制(系统自设,也可以自己设置),超过了这个时间,便会抛出该异常
					String echo = buf.readLine();
					System.out.println(echo);
				}catch(SocketTimeoutException e){
					System.out.println("Time out, No response");
				}
			}
		}
		input.close();
		if(client != null){
	        //如果构造函数建立起了连接,则关闭套接字,如果没有建立起连接,自然不用关闭
			client.close();	//只关闭socket,其关联的输入输出流也会被关闭
		}
	}
}</strong></span>

 

    服务端需要用到多线程,这里单独写了一个多线程类,代码如下:

<span style="font-size:18px;"><strong>package zyb.org.server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

/**
 * 该类为多线程类,用于服务端
 */
public class ServerThread implements Runnable {

	private Socket client = null;
	public ServerThread(Socket client){
		this.client = client;
	}
	
	@Override
	public void run() {
		try{
			//获取Socket的输出流,用来向客户端发送数据
			PrintStream out = new PrintStream(client.getOutputStream());
			//获取Socket的输入流,用来接收从客户端发送过来的数据
			BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
			boolean flag =true;
			while(flag){
				//接收从客户端发送过来的数据
				String str =  buf.readLine();
				if(str == null || "".equals(str)){
					flag = false;
				}else{
					if("bye".equals(str)){
						flag = false;
					}else{
						//将接收到的字符串前面加上echo,发送到对应的客户端
						out.println("echo:" + str);
					}
				}
			}
			out.close();
			client.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
</strong></span>

   服务端处理TCP连接请求的代码如下:

<span style="font-size:18px;"><strong>package zyb.org.server;

import java.net.ServerSocket;
import java.net.Socket;

public class Server1 {
	public static void main(String[] args) throws Exception{
		//服务端在20006端口监听客户端请求的TCP连接
		ServerSocket server = new ServerSocket(20006);
		Socket client = null;
		boolean f = true;
		while(f){
			//等待客户端的连接,如果没有获取连接
			client = server.accept();
			System.out.println("与客户端连接成功!");
			//为每个客户端连接开启一个线程
			new Thread(new ServerThread(client)).start();
		}
		server.close();
	}
}
</strong></span>


 

   执行结果截图如下:



 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值