您当前的位置: 首页 >  网络

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java】Socket网络编程解读与实战

星拱北辰 发布时间:2020-03-07 21:59:34 ,浏览量:0

Socket原理 Socket原理

《Socket 到底是什么》

  • Socket——套接字
  • 是网络应用程序编程的接口和一种机制
  • 用套接字中的相关函数来建立连接和完成通信
  • Socket可以看成在两个程序进行通讯连接中的一个端点
  • 将区分不同应用程序进程的三个参数:通信的目的的IP地址、使用的传输层协议、使用的端口号 与一个socket绑定 在这里插入图片描述
端口工作原理

服务器上的端口不是监听端口。 在这里插入图片描述

基于TCP的Socket编程 基于TCP的Socket编程
  • 利用TCP协议进行通信 存在两个应用程序,有主从之分。一个称为服务器程(Server), 另外一个称为客户机程(Client)
  • 交互过程
  1. 服务器程序创建一个 ServerSocket,然后调用 accept方法等待客户来连接
  2. 客户端程序创建一个socket 并请求与服务器建立连接
  3. 刚才建立了连接的两个 socket在一个单独的线程上 对话
  4. 服务器开始等待新的连接请 求 在这里插入图片描述
ServerSocket —— java.net.ServerSocket
  • 实现服务器套接字
  • 构造函数
    • ServerSocket(int port)
    • ServerSocket(int port, int maxqu)
  • accept( ) 方法用于等待客户端触发通信,返回值类型为 Socket
Socket —— java.net.Socket
  • 实现客户端套接字
  • 构造函数
    • Socket(String hostName, int port)
    • Socket(InetAddress a, int port)
  • 可用方法
    • InetAddress getInetAddress( )
    • int getPort( )
    • int getLocalPort( )
    • InputStream getInputStream()
    • OutputStream getOutputStream()
    • void close()
基于多线程的Socket编程
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TServer {
	public static void main(String[] args) {
		ServerSocket ss = null;
		try {
			ss = new ServerSocket(8888);
			System.out.println("服务器启动");
			while(true) {
				Socket s = ss.accept();
				System.out.println("连接的客户端IP "+s.getInetAddress().getHostAddress());
				Servicer ser = new Servicer(s);
				Thread t = new Thread(ser);
				t.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class TClient {
	public static void main(String[] args) {
		Socket s = null;
		try {
			s = new Socket("127.0.0.1", 8888);
			BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
			PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()), true);
			while (true) {
				Scanner sc = new Scanner(System.in);
				System.out.println("客户端:");
				String str = sc.nextLine();
				//将控制台输入的信息,发送给服务器
				out.println(str);
				if (str.equals("exit")) {
					break;
				}
				//接收服务器端传来的信息
				String msg = in.readLine();
				System.out.println("接收服务器数据:" + msg);
			}
			System.out.println("客户端退出");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (s != null) {
					s.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

在这里插入图片描述

经典案例——Socket网络聊天室

发过三个版本的,分享一下!

  • 简单版
  • 升级版
  • GUI+命令行结合版
关注
打赏
1660750074
查看更多评论
立即登录/注册

微信扫码登录

0.0435s