网络编程之TCP-Socket
Posted zjm1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程之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进行传输(后续待补充)
以上是关于网络编程之TCP-Socket的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段