构造方法:

1.使用构造方法 public ServerSocket(int port) 和public ServerSocket(int port,int backlog)

创建ServerSocket对象,则客户端可以使用服务器任意的IP连接到ServerSocket对象中。

2. 使用public ServeSocket(int port,int backlog,InetAddress bindAddr)构造方法中的参数bindAddr创建ServerSocket对象后,

客户端想要连接到服务端,则客户端Socket的构造方法的参数要写上与ServerSocket构造方法的参数bindAddr相同的IP地址,

不然就会出现异常。

绑定指定的Socket地址:

public void bind(SocketAddress endpoint)方法的主要作用是将ServerSocket绑定到特定的Socket地址(IP地址和端口号),

使用这个地址与客户端进行通信。如果地址为null,则系统将挑选一个临时的端口和一个有效的本地地址来绑定套接字。

SocketAddress本身是一个抽象类,代表Socket地址;而InetAdress类代表IP地址。

InetAddress构造方法:

1.public InetSocketAddress(int port)的作用是创建套接字地址,其中IP地址为通配符地址,端口号为指定值。有效端口0~65535之间;

端口号传入0代表bind操作中随机挑选空闲的端口。

2:public InetSocketAddress(String hostname,int port的作用是根据主机名和端口号创建套接字地址。

3:public InetSocketAddress(InetAddress addr,int port)的作用根据IP地址和端口号创建套接字地址。

Server.java

package com.company.s8;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket; public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket();
serverSocket.bind(new InetSocketAddress(8888));
System.out.println("server begin accept");
serverSocket.accept();
System.out.println("server end accept");
}catch (IOException e){
e.printStackTrace();
System.out.println("catch "+System.currentTimeMillis());
}
}
}

Client.java

package com.company.s8;

import java.net.Socket;

public class Client {
public static void main(String[] args) {
try {
System.out.println("client request begin");
Socket socket=new Socket("localhost",8888);
System.out.println("client request end");
}catch (Exception e){
e.printStackTrace();
}
}
}

getLocalSocketAddress()获取bending的SocketAddress对象,返回此Socket绑定的端点的地址,如果尚未绑定,则返回null.

getLocalPort()方法用来获取Socket绑定到本地的端口。

package com.company.s12;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket; public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket();
System.out.println("new ServerSocket 无参构造的端口是:"+serverSocket.getLocalPort());
//windows再dos窗口ipconfig获取
serverSocket.bind(new InetSocketAddress("192.168.0.101",8888));
System.out.println("bind方法之后的端口是:"+serverSocket.getLocalPort());
InetSocketAddress inetSocketAddress=(InetSocketAddress) serverSocket.getLocalSocketAddress();
System.out.println("inetSocketAddress.getHostName="+inetSocketAddress.getHostName());
System.out.println("inetSocketAddress.getHostString="+inetSocketAddress.getHostString());
System.out.println("inetSocketAddress.getPort="+inetSocketAddress.getPort());
serverSocket.close();
}
}

SocketAddress与InetAddress本质的区别是SocketAddress不基于任何协议。

Server.java

package com.company.s12_1;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket();
InetAddress inetAddress=InetAddress.getByName("localhost");
InetSocketAddress inetSocketAddress=new InetSocketAddress(inetAddress,8888);
serverSocket.bind(inetSocketAddress);
System.out.println("server begin");
Socket socket=serverSocket.accept();
System.out.println("server end");
socket.close();
serverSocket.close();
}
}

Client.java

package com.company.s12_1;

import java.io.IOException;
import java.net.Socket; public class Client {
public static void main(String[] args) throws IOException {
System.out.println("client begin");
Socket socket=new Socket("localhost",8888);
System.out.println("client end");
}
}

getHostName()和getHostString()方法的区别

getHostName()方法的作用是获取主机名。注意,如果地址是字面IP地址创建的,则此方法可能触发名称服务反向查找,也就是DNS服务通过IP找到域名。

getHostString()方法的作用是返回住居名或地址的字符串形式,如果它没有主机名,则返回IP地址。这样做的好处是不尝试返回查找。

package com.company.s12_2;

import java.net.InetSocketAddress;

public class Server {
public static void main(String[] args) {
InetSocketAddress inetSocketAddress1=new InetSocketAddress("192.168.0.101",80);
InetSocketAddress inetSocketAddress2=new InetSocketAddress("192.168.0.101",80);
System.out.println(inetSocketAddress1.getHostName());
System.out.println(inetSocketAddress2.getHostString());
}
}

测试结果:

Socket的常用方法。的更多相关文章

  1. Socket通信常用方法

    使用tcp协议,链接服务器的方法 /// <summary> /// 连接使用tcp协议的服务端 /// </summary> /// <param name=" ...

  2. 我的Python成长之路---第七天---Python基础(22)---2016年2月27日(晴)

    socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  3. Java基础学习笔记二十二 网络编程

    络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则 ...

  4. Java网络通信协议、UDP、TCP类加载整理

    网络通信协议 网络通信协议 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互 ...

  5. python全栈开发 * 35 知识点汇总 * 180720

    35 socket 一些常用方法 验证客户端信息 添加随机字符串 socketserver模块 一.socket模块中一些常用方法1.send和sendall的区别2.conn.getpeername ...

  6. python套接字编程基础

    python套接字编程 目录 socket是什么 套接字的工作流程 基于tcp的套接字 基于udp的套接字 socket是什么 客户端/服务器架构(C/S架构) 服务端:提供服务的一端 客户端:请求服 ...

  7. java基础-day23

    第11天  面向网络编程 今日内容介绍 u  网络编程概述 u  UDP u  TCP 第1章   网络编程概述 1.1      网络协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的 ...

  8. Java第三阶段学习(八:网络通信协议、UDP与TCP协议)

    一.网络通信协议 1.概念: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传 ...

  9. day011-网络编程

    1. 网络编程概述 1.1  网络编程三要素 地址.端口.协议 1.1.1 IP地址:网络中设备的唯一标识. IPV4格式:xxx.xxx.xxx.xxx由四段数字组成,每一段数字由八位二进制数字组成 ...

随机推荐

  1. Java 从入门到进阶之路(十一)

    之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这 ...

  2. MongoDB 谨防索引seek的效率问题【华为云技术分享】

    目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门:http://www.mongoing.com/archives/27310 背景 ...

  3. 阿里巴巴主导的“华山版《Java 开发手册》”简介

    1."83行代码计划"项目介绍(转自github): 2018年9月22日,在2018杭州云栖大会上,召开<码出高效:Java 开发手册>新书发布会,并宣布将图书所有收 ...

  4. jeecg培训第一课(代码生成与权限分配)

    问题描述:进口部要完成一票进口报关单的增删改查,操作员张三登录只能增删改张三的报关单,操作员李四登录只能增删改李四的报关单, 部门主管王五登录能查看张三和李四的报关单,但不能修改删除.操作员能提交报关 ...

  5. Django中直接执行SQL语句

    欢迎加入python学习交流群 667279387 今天在django views.py看到同事写的代码里面有段关于数据库查询的语句.因为涉及多个表的查询,所以django 的models的查询无法满 ...

  6. 2017 ACM/ICPC 沈阳 I题 Little Boxes

    Little boxes on the hillside. Little boxes made of ticky-tacky. Little boxes. Little boxes. Little b ...

  7. 基于centos7.3 redhat7.3安装LAMP(php7.0 php7.1)生产环境实践

  8. Python基础语法总结【新手必学】

      前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45189038直接上知识点: 1. 注释 单行注释: ...

  9. 简述c和c++的基本区别,你真的懂吗?(面试必学)

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:angry_youth   **1.c和c++的头文件不同:** c的头 ...

  10. 【JS】302- 回调地狱解决方案之Promise

    为什么出现Promise 在javascript开发过程中,代码是单线程执行的,同步操作,彼此之间不会等待,这可以说是它的优势,但是也有它的弊端,如一些网络操作,浏览器事件,文件等操作等,都必须异步执 ...