网络编程之TCP-Socket

一.Socket

    ➢两个Java应用程产可通过一个双向的网络通信连接实现数据文换,这个及向链路的一端称
     为个Socket。
Socket通常用来实现client-server(网络释义:主从式架构)连接。
     ➢java. net包中定义的两个类Socket和Serversopket(TCP服务器端的插座socket), 分别用来实现双向连接的
     cljent和server
     建立连接时所需的寻址信息为远程计算机的IP地址和端口号[区分不同的应用程序](Port number)

补充:①端口号2字节,最多有65536个端口,一个应用程序可以占用多个端口②端口分两种:UDP端口和TCP端口,每一种都是65536个端口,它们是分开的


二.程序实例

首先是服务器端

 1 import java.io.DataInputStream;
 2 import java.net.*;
 3 /**
 4  * 一.public class ServerSocket extends Object implements Closeable
 5  * 这个类实现了服务器套接字。服务器套接字等待通过网络进入的请求。 
 6  * 它根据该请求执行一些操作,然后可能将结果返回给请求者。 
 7  * 综上所诉:ServerSocket类为阻塞式的类型
 8  * 
 9  * 二.public Socket accept()throws IOException
10  * 侦听要连接到此套接字并接受它。 该方法将阻塞直到建立连接。
11  */
12 public class TCPserver {
13      public static void main(String[] args) throws Exception {
14             //等待客户端连接,告知serversocket服务器端在6666端口进行监听
15             ServerSocket ss=new ServerSocket(6666);
16             while(true) {//接收多个客户端连接
17                 //接受客户端连接
18                 Socket s=ss.accept();
19                 //客户端接收到数据流
20                 DataInputStream dis=new DataInputStream(s.getInputStream());
21                 //打印
22                 System.out.println(dis.readUTF());
23                 //关闭流和服务器端口
24                 dis.close(); s.close();
25             }
26         }
27 }

其次是客户端

 1 import java.io.DataOutputStream;
 2 import java.io.OutputStream;
 3 /**
 4  * public class Socket extends Object implements Closeable
 5  * 该类实现客户端套接字(也称为“套接字”)。 
 6  * 套接字是两台机器之间通讯的端点。
 7  * 
 8  *  构造方法public Socket(String host,int port)throws UnknownHostException,
 9  *  IOException创建流套接字并将其连接到指定主机上的指定端口号。
10  */
11 import java.net.*;
12 public class Client {
13     public static void main(String[] args) throws Exception{
14         //客户端申请连接
15         Socket sc=new Socket("127.0.0.1", 6666);
16         //客户端通过流开始对话
17         OutputStream os = sc.getOutputStream();
18         //包装管道,以UTF-8的形式输出
19         DataOutputStream dos=new DataOutputStream(os);    
20         dos.writeUTF("莫西莫西,我是巫妖果子");
21         //关闭流和客户端
22         dos.close(); sc.close();
23         }
24 }

温馨小提示:①程序启动时先启动server端(监听),再启动client端②程序原理图,包括数据流都是通过插座socket进行传输(后续待补充)

 

原文地址:https://www.cnblogs.com/zjm1999/p/10158963.html