关于 网络套接字

Internet 概述
应用层 显示层 会话层 HTTP FTP SMTP DNs
传输层 TCP UDP
网络层 Internet 协议
数据链路层 物理层 Enethernet
IP地址端口号 ip地址: 服务器地址 端口号 :服务器上的任务编号

TCP 传输控制协议 稳定但是慢
UDP 用户数据报协议 不稳定 可能丢失 但是快 可以中断

java.net 组件包
java.net.InetAddress 互联网IP地址
java.net.URL 同一资源定位符
java.net.Socket 客户端套接字
java.net.ServerSocket 服务器端套接字
java.net.DatagramPacket 数据报包
java.net.DatagramSocket 数据报包套接字

URL的建立
URL是一种统一资源定位符 只想互联网上的资源
URL url1 = new URL("")里面的结构是 协议 http // +IP地址端口号(或者域名)www.baidu.com +要申请的文件(也可以不写 这里暂时不写)
也可以用另一个url当作参数
URL url = new URL(url1+index.html)

InetAddress/SocketAddress
InetAddress 中有 ipv6以及ipv4
不能用new建立 需要用静态方法建立

一 InetAddress add0 = InetAddress.getLocalHost();建立本机IP地址实例;
add0.getHostname();得到本机名称;

InetSocketAddress 就可以实例化

二 InetSocketAddress isa = new InetSocketAddress(“localHost”,9090);括号里面可以是任意Ip地址 端口号
也是 用get 等等函数继续操作

Socket 用来 连接的套接字 不用时要关闭
public Socket();创建未连接的套接字;
public Socket(InetAddress address,int port);创建指定Ip地址和端口号的套接字
public Socket(InetAddress address,int port,InetAddress loacladdr,int localport);创建到连接远程服务器的套接字;
public Socket(String host,int port)创建一个流套接字并将其连接到指定主机的指定端口号上

实例
Socket client = null;
client = new Socket();
InetSocketAddress is = new InetSocketAddress("localhost",9595);
try{
client.bind(is);绑定完毕
\如果要测试 绑定是否成功 client.isBind();boolean型函数 是否连接成功 client.isConnected();

关于套接字的函数还有
void close();关闭此套接字;
void connect(SocketAddress endpoint)将此套接字连接到服务器
void connect (SocketAddress endPoint ,int timeout)链接到指定服务器并且限定超时时间
InputStream getinputStream();返回此套接字的输入流
outputStream getOutputstream();返回此套接字的输出流;

tip:在不使用套接字时要关闭套接字,最好首先关闭套接字的输入输出流;

服务器 ServerSocket()
public ServerSocket() throws IOException创建非绑定服务器套接字
public ServerSocket(int port) 创建绑定到特定端口的服务器套接字
public ServerSocket(int port,int backlog)指定端口号和队列长度
public ServerSocket(int port,int backlog , InetAddress bindAddr)指定端口号队列长度以及指定主机地址创建套接字
public Socket accept()throws IOException倾听并接收到此套接字的连接,未连接前处于阻塞状态
void close()
public void setSoTimeout(int timeout)以毫秒为单位设置超时时间如果为零则永不超时;
public boolean isBound()测试ServerSocket是否绑定
public boolean isClosed()测试ServerSocket是够关闭;
public InetAddress getInetAddress()返回此服务器套接字的本地地址;

具体实施

客户端

Socket s = new Socket();
Scanner sin =new Scanner(System.in);
InputStream in = null;
OutputStream out = null;
DataInputStream din = null;
DataOutputStream dout = null;
InetSocketAddress bendi = new InetSocketAddress("localhost",9090);
InetSocketAddress fuwuqi = new InetSocketAddress("localhost",9898);
s.bind(bendi);
s.connected(fuwuqi);
in = s.getInputStream();
din = new DataInputStream(in);
out = s.getOutputStream();
dout = new DataOutputStream(out);
while(true)
{
System.out.println("请输入您的名字");
String str = sin.next();
dout.writeUTF(str);
String str2 =din.readUTF();
System.out.println(str2)
}

服务器端
ServerSocket sss = new ServerSocket(9898);
Socket s = new Socket();
InputStream in = null;
OutputStream out = null;
DataInputStream din = null;
DataOutputStream dout = null;
while(true){
s= sss.accept();
in = s.getInputStream();
din = new DataInputStream(in);
out = s.getOutputStream();
dout = new DataOutputStream(out);
while(true){

           String str = din.readUTF();
            Systeam.out.println(str);
              
        }

}

posted on 2020-04-28 01:26  苏阔Garrison  阅读(158)  评论(0编辑  收藏  举报

导航