java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

时间:2021-10-17 01:04:07

InerAddress:

/**IP地址:在网络上唯一标示一台计算机
* 端口号:标示计算机上不同的应用程序
* java.net.InetAddress类:此类表示互联网协议 (IP) 地址。
* 常用方法:
* getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
* getHostName() 获取此 IP地址的主机名。
* getHostAddress()返回 IP 地址字符串(以文本表现形式)。
* getLocalHost() 返回本地主机。
* getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
*
*/

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
public class TestInetAddress {
public static void main(String[] args) {
try {
//在给定主机名的情况下确定主机的 IP 地址。
// InetAddress inetAddress = InetAddress.getByName("P-PC");
InetAddress inetAddress = InetAddress.getLocalHost();//获取本地主机
System.out.println(inetAddress);
String hostName = inetAddress.getHostName();
System.out.println("主机名:"+hostName);
String ip = inetAddress.getHostAddress();
System.out.println("IP地址:"+ip);
//根据主机名或域名获取其IP地址
InetAddress[] ids = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress2 : ids) {
System.out.println(inetAddress2);
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

InetSocketAddress:

*java.net.InetSocketAddress类:此类实现 IP 套接字地址(IP 地址 + 端口号)。
*构造方法
*InetSocketAddress(InetAddress addr, int port)根据 IP 地址和端口号创建套接字地址。
*InetSocketAddress(String hostname, int port) 根据主机名和端口号创建套接字地址。
*常用的方法:
* getAddress():获取 InetAddress。
* getPort() 获取端口号。
* toString() 构造此 InetSocketAddress 的字符串表示形式。(主机名/Ip:端口号)
* getHostName()获取 主机名。

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
public class TestInetSocketAddress {
public static void main(String[] args) {
// InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",3306);
try {
InetSocketAddress socketAddress = new InetSocketAddress(InetAddress.getLocalHost(), 3306);
System.out.println(socketAddress);
InetAddress inetAddress = socketAddress.getAddress();
System.out.println("主机信息:"+inetAddress);
int port = socketAddress.getPort();
System.out.println("端口号:"+port);
String hostName = socketAddress.getHostName();
System.out.println("主机名:"+hostName);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

URL:

*URL:统一资源定位符
*组成部分:协议,主机名或IP,端口号,资源路径
*java.net.URL类:代表一个统一资源定位符,它是指向互联网“资源”的指针
* 常用的构造方法
* URL(String spec) 根据 String 表示形式创建 URL 对象。
* URL(String protocol, String host, int port, String file) 根据指定 protocol、host、port 号和 file 创建 URL 对象。
* 常用的方法:
* getProtocol()获取此 URL 的协议名称。
* getHost()获取此 URL 的主机名(如果适用)。
* getPort() 获取此 URL 的端口号。
* getFile()获取此 URL 的文件名。
* getDefaultPort()获取与此 URL 关联协议的默认端口号。
* getPath()获取此 URL 的路径部分。
* ...

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
public class TestURL {
public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com/index.html#aa?cansu=bjsxt");
String protocol = url.getProtocol();
System.out.println("协议:"+protocol);
String host = url.getHost();
System.out.println("主机名:"+host);
int port = url.getPort();
System.out.println("端口号:"+port);
int defualtPort = url.getDefaultPort();
System.out.println("默认端口:"+defualtPort);
String file = url.getFile();
System.out.println("资源路径:"+file);
String path = url.getPath();
System.out.println("资源路径:"+path);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

URL类
* InputStream openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL; public class WebSpider {

public static void main(String[] args) {

try {

URL url = new URL("https://channel.jd.com/men.html");

InputStream ips = url.openStream();

InputStreamReader isr = new InputStreamReader(ips);//将字节流转换为字符流

BufferedReader br = new BufferedReader(isr);

String str;

while((str=br.readLine())!=null){

System.out.println(str);

}

br.close();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

Socket与SeverSocket信息的传递:

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; /
  • java.net.ServerSocket类:此类实现服务器套接字。服务器套接字等待请求通过网络传入
  • 构造方法:
  • ServerSocket(int port)创建绑定到特定端口的服务器套接字。
  • 常用方法:
  • accept() 侦听并接受到此套接字的连接。
  • close() 关闭此套接字。
  • 服务器端

    */

    public class SimpleServer {

    public static void main(String[] args) {

    try {

    System.out.println("------服务器端启动------");

    //1.创建服务器端的套接字并指定端口

    ServerSocket serverSocket = new ServerSocket(8888);

    //2.侦听并接受到此套接字的连接。

    Socket socket = serverSocket.accept();

    //3.从套接字中获取一个输入流

    InputStream ips = socket.getInputStream();

    InputStreamReader isr = new InputStreamReader(ips);

    char[] cs = new char[1024];

    int len = isr.read(cs);

    String message = new String(cs, 0, len);

    System.out.println("客户端消息:"+message);

    isr.close();

    socket.close();

    serverSocket.close();

    System.out.println("服务器数据接收完毕!");

    } catch (IOException e) {

    e.printStackTrace();

    } }

    }
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException; /

*java.net.Socket类:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

*构造方法:

*Socket(InetAddress address, int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

*Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。

*常用方法:

*getOutputStream()返回此套接字的输出流。

*getInputStream() 返回此套接字的输入流。

*close()关闭此套接字。

客户端

/

public class SimpleClient {

public static void main(String[] args) {

try {

System.out.println("-------客户端启动-------");

//1.创建一个套接字并将其连接到指定的IP地址的指定端口

Socket socket = new Socket("127.0.0.1",8888);

//2.获取套接字的输出流,用于输出数据

OutputStream ops = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(ops);

osw.write("你好!");

osw.flush();

osw.close();

socket.close();

System.out.println("客户端数据发送完毕!");

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}
 }

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

根据用户输入的账号密码,从服务器上判断是否正确并传递信息回来:

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.Serializable;
/**
* 如果要对该对象进行序列化,就必须实现Serializable接口
* 封装用户名和密码信息
*/
public class User implements Serializable{
private String userName;
private String password;
public User(){
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> User(String userName,String password){
</span><span style="color: #0000ff">this</span>.userName=<span style="color: #000000">userName;
</span><span style="color: #0000ff">this</span>.password=<span style="color: #000000">password;
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String getUserName() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> userName;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> setUserName(String userName) {
</span><span style="color: #0000ff">this</span>.userName =<span style="color: #000000"> userName;
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String getPassword() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> password;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> setPassword(String password) {
</span><span style="color: #0000ff">this</span>.password =<span style="color: #000000"> password;
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.DataInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 客户端:
* 1.获取用户名和密码
* 2.将用户名和密码封装成User对象
* 3.使用对象流将user对象发生到服务器端
* 4.读取服务器的响应消息
* 5.释放资源
*/
public class LoginClient {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//获取输入的用户名和密码
System.out.println("请输入用户名:");
String userName = input.next();
System.out.println("请输入密码:");
String password = input.next();
//将用户名和密码封装成User对象
User user = new User(userName,password);
try {
//创建Socket对象
Socket socket = new Socket("127.0.0.1",6666);
//获取输出流
OutputStream ops = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ops);
//使用对象流将user对象发送到服务器端
oos.writeObject(user);
oos.flush();
//获取服务器端响应消息
InputStream ips = socket.getInputStream();
DataInputStream dis = new DataInputStream(ips);
String str = dis.readUTF();
System.out.println(str);
//释放资源
dis.close();
oos.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; /
  • 服务器端:
  • 1.获取客户端发送的user对象(封装了用户名和密码)
  • 2.判断用户名和密码是否合法
  • 3.如果合法,向客户端发送"恭喜你,登陆成功!";否则向客户端发送"用户名或密码有误!"
  • 4.释放资源

    */

    public class LoginServer {

    public static void main(String[] args) {

    try {

    //1.获取客户端发送的用户名和密码信息

    ServerSocket serverSocket = new ServerSocket(6666);

    Socket socket = serverSocket.accept();

    InputStream ips = socket.getInputStream();

    ObjectInputStream ois = new ObjectInputStream(ips);

    User user = (User)ois.readObject();

    //2.判断用户名和密码是否正确

    String message;

    if("zzsxt".equals(user.getUserName())&&"zzsxt".equals(user.getPassword())){

    message="恭喜你,登陆成功!";

    }else{

    message="用户名或密码有误!";

    }

    //3.创建输出流向客户端发送消息

    OutputStream ops = socket.getOutputStream();

    DataOutputStream dos = new DataOutputStream(ops);

    dos.writeUTF(message);

    dos.flush();

    //4.释放资源

    ois.close();

    dos.close();

    socket.close();

    serverSocket.close();

    } catch (IOException e) {

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } }

    }
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

方法2:

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
/**
* 服务器端:
* 1.获取客户端发送的user对象(封装了用户名和密码)
* 2.判断用户名和密码是否合法
* 3.如果合法,向客户端发送"恭喜你,登陆成功!";否则向客户端发送"用户名或密码有误!"
* 4.释放资源
*/
public class LoginServer {
//用于保存用户名和密码的信息,利用用户名做键,利用密码做值
static Map<String,String> map = new HashMap<String,String>();
//初始化map
static{
map.put("zzsxt", "zzsxt");
map.put("bjsxt", "bjsxt");
map.put("whsxt", "whsxt");
}
static int count=0;//第几位访客
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
</span><span style="color: #008000">//</span><span style="color: #008000">1.获取客户端发送的用户名和密码信息</span>
ServerSocket serverSocket=<span style="color: #0000ff">null</span><span style="color: #000000">;
Socket socket</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
ObjectInputStream ois </span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
DataOutputStream dos</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
serverSocket </span>= <span style="color: #0000ff">new</span> ServerSocket(<span style="color: #800080">6666</span><span style="color: #000000">);
</span><span style="color: #0000ff">while</span>(<span style="color: #0000ff">true</span><span style="color: #000000">){
socket </span>=<span style="color: #000000"> serverSocket.accept();
InputStream ips </span>=<span style="color: #000000"> socket.getInputStream();
ois </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> ObjectInputStream(ips);
User user </span>=<span style="color: #000000"> (User)ois.readObject();
</span><span style="color: #008000">//</span><span style="color: #008000">2.判断用户名和密码是否正确</span>
String userName = user.getUserName();<span style="color: #008000">//</span><span style="color: #008000">获取用户输入的用户名 aa</span>
String password = user.getPassword();<span style="color: #008000">//</span><span style="color: #008000">获取用户输入的密码</span>
String upass=map.<span style="color: #0000ff">get</span><span style="color: #000000">(userName);
String message;
</span><span style="color: #0000ff">if</span>(upass!=<span style="color: #0000ff">null</span>&amp;&amp;<span style="color: #000000">upass.equals(password)){
count</span>++;<span style="color: #008000">//</span><span style="color: #008000">计数</span>
message=<span style="color: #800000">"</span><span style="color: #800000">恭喜你,登陆成功!您是第</span><span style="color: #800000">"</span>+count+<span style="color: #800000">"</span><span style="color: #800000">位访客</span><span style="color: #800000">"</span><span style="color: #000000">;
}</span><span style="color: #0000ff">else</span><span style="color: #000000">{
message</span>=<span style="color: #800000">"</span><span style="color: #800000">用户名或密码有误!</span><span style="color: #800000">"</span><span style="color: #000000">;
}
</span><span style="color: #008000">//</span><span style="color: #008000">3.创建输出流向客户端发送消息</span>
OutputStream ops =<span style="color: #000000"> socket.getOutputStream();
dos </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> DataOutputStream(ops);
dos.writeUTF(message);
dos.flush();
}
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e) {
e.printStackTrace();
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (ClassNotFoundException e) {
e.printStackTrace();
}</span><span style="color: #0000ff">finally</span><span style="color: #000000">{
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
</span><span style="color: #008000">//</span><span style="color: #008000">4.释放资源</span>

ois.close();

dos.close();

socket.close();

serverSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

方法3:转换为多线程交互

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.Serializable;
/**
* 如果要对该对象进行序列化,就必须实现Serializable接口
* 封装用户名和密码信息
*/
public class User implements Serializable{
private String userName;
private String password;
public User(){
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> User(String userName,String password){
</span><span style="color: #0000ff">this</span>.userName=<span style="color: #000000">userName;
</span><span style="color: #0000ff">this</span>.password=<span style="color: #000000">password;
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String getUserName() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> userName;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> setUserName(String userName) {
</span><span style="color: #0000ff">this</span>.userName =<span style="color: #000000"> userName;
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String getPassword() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> password;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> setPassword(String password) {
</span><span style="color: #0000ff">this</span>.password =<span style="color: #000000"> password;
} @Override
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String toString() {
</span><span style="color: #0000ff">return</span> <span style="color: #800000">"</span><span style="color: #800000">User [userName=</span><span style="color: #800000">"</span> + userName + <span style="color: #800000">"</span><span style="color: #800000">, password=</span><span style="color: #800000">"</span> + password + <span style="color: #800000">"</span><span style="color: #800000">]</span><span style="color: #800000">"</span><span style="color: #000000">;
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
public class LoginClient {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//获取输入的用户名和密码
System.out.println("请输入用户名:");
String userName = input.next();
System.out.println("请输入密码:");
String password = input.next();
//将用户名和密码封装成User对象
User user = new User(userName,password);
try {
//创建Socket对象
Socket socket = new Socket("127.0.0.1",6666);
//获取输出流
OutputStream ops = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ops);
//使用对象流将user对象发送到服务器端
oos.writeObject(user);
oos.flush();
//获取服务器端响应消息
InputStream ips = socket.getInputStream();
DataInputStream dis = new DataInputStream(ips);
String str = dis.readUTF();
System.out.println(str);
//释放资源
dis.close();
oos.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map; /
  • 用于处理客户端请求的线程
  • @author Administrator
/

public class ServerThread extends Thread{

private Socket socket;

//用于保存用户名和密码的信息,利用用户名做键,利用密码做值

static Map<String,String> map = new HashMap<String,String>();

//初始化map

static{

map.put("zzsxt", "zzsxt");

map.put("bjsxt", "bjsxt");

map.put("whsxt", "whsxt");

}

static int count=0;//第几位访客

//构造方法

public ServerThread(Socket socket){

this.socket=socket;

}

/
*

* 处理客户端请求

*/

@Override

public void run() {

ObjectInputStream ois =null;

DataOutputStream dos=null;

try {

InputStream ips = socket.getInputStream();

ois = new ObjectInputStream(ips);

User user = (User)ois.readObject();

//2.判断用户名和密码是否正确

String userName = user.getUserName();//获取用户输入的用户名 aa

String password = user.getPassword();//获取用户输入的密码

String upass=map.get(userName);

String message;

if(upass!=null&&upass.equals(password)){

count++;//计数

message="恭喜你,登陆成功!您是第"+count+"位访客";

}else{

message="用户名或密码有误!";

}

//3.创建输出流向客户端发送消息

OutputStream ops = socket.getOutputStream();

dos = new DataOutputStream(ops);

dos.writeUTF(message);

dos.flush();

} catch (IOException |ClassNotFoundException e) {

e.printStackTrace();

}finally{

try {

ois.close();

dos.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
/**
* 面临的问题:
* 当多个用户同时登陆时,只能排队等待。
* 解决方案:使用多线程进行解决,为每一个客户请求创建线程,为其提供服务。
*
* 服务器端:
* 1.获取客户端发送的user对象(封装了用户名和密码)
* 2.判断用户名和密码是否合法
* 3.如果合法,向客户端发送"恭喜你,登陆成功!";否则向客户端发送"用户名或密码有误!"
* 4.释放资源
*
*/
public class LoginServer {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
</span><span style="color: #008000">//</span><span style="color: #008000">1.获取客户端发送的用户名和密码信息</span>
ServerSocket serverSocket=<span style="color: #0000ff">null</span><span style="color: #000000">;
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
serverSocket </span>= <span style="color: #0000ff">new</span> ServerSocket(<span style="color: #800080">6666</span><span style="color: #000000">);
</span><span style="color: #0000ff">while</span>(<span style="color: #0000ff">true</span><span style="color: #000000">){
Socket socket </span>=<span style="color: #000000"> serverSocket.accept();
</span><span style="color: #008000">//</span><span style="color: #008000">启动线程,处理用户请求</span>
<span style="color: #0000ff">new</span><span style="color: #000000"> ServerThread(socket).start();
}
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e) {
e.printStackTrace();
}</span><span style="color: #0000ff">finally</span><span style="color: #000000">{
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
serverSocket.close();
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e) {
e.printStackTrace();
}
}
}

}

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

TCP与UDP的区别:

1.TCP与UDP基本区别
  1.基于连接与无连接,TCP是面向连接,UDP是不面向连接;
  2.TCP要求系统资源较多效率低,UDP较占用资源少; 
  3.UDP程序结构较简单,TCP点到点的通信,UDP可以广播发送 ;
  4.流模式(TCP)与数据报模式(UDP); 
  5.TCP保证数据正确性,UDP可能丢包(发送不管对方是否准备好,接收方收到也无确认); 
  6.TCP保证数据顺序,UDP不保证 ;

  
2.UDP应用场景:
  1.面向数据报方式
  2.网络数据大多为短消息 
  3.拥有大量Client
  4.对数据安全性无特殊要求
  5.网络负担非常重,但对响应速度要求高
 
3.具体编程时的区别
   1.socket()的参数不同 
   2.UDP Server不需要调用listen和accept 
   3.UDP收发数据用sendto/recvfrom函数 
   4.TCP:地址信息在connect/accept时确定 
   5.UDP:在sendto/recvfrom函数中每次均 需指定地址信息 
   6.UDP:shutdown函数无效

java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)的更多相关文章

  1. Java网络编程-URI和URL

    前提 前面的一篇文章<Java中的Internet查询>分析完了如何通过IP地址或者主机名确定主机在因特网中的地址.任意给定主机上可能会有任意多个资源,这些资源需要有标识符方便主机之间访问 ...

  2. Java 网络编程(二) 两类传输协议&colon;TCP UDP

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...

  3. Java网络编程学习A轮&lowbar;03&lowbar;抓包分析TCP四次挥手

    参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module ...

  4. Java网络编程学习A轮&lowbar;02&lowbar;抓包分析TCP三次握手过程

    参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...

  5. Java网络编程InetAddress类

    InetAddress用来代表IP地址.一个InetAdress的对象就代表着一个IP地址, getByName(String host):在给定主机名的情况下确定主机的 IP 地址,主机名可以是机器 ...

  6. Java网络编程(二)关于Socket的一些个人想法

    1.Socket之间是如何通信的? 1.1 通信是要两两之间进行的所以应该有至少一个客户端(Client)和一个服务器端(Server),一般来说都是多个c端对一个s端---c\s 1.2 在客户端: ...

  7. java网络编程socket解析

    转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...

  8. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  9. Java 网络编程(转)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  10. 关于Java网络编程

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

随机推荐

  1. &period;NET轻量级MVC框架:Nancy入门教程&lpar;一&rpar;——初识Nancy

    当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢?看到这里也许你会 ...

  2. Linux&lpar;CentOS&rpar;中安装MongoDB

    1. 下载对应操作系统和机器的版本 网址: https://www.mongodb.com/download-center?jmp=docs 我的系统为CentOS-6.6 ,64位,所以选择红帽子版 ...

  3. Sharepoint 2013 系列篇&lpar;安装部署&rpar;--上篇

    前言 sharepoint的部署是按照物理拓扑图的架构来部署,按照物理拓扑图架构分为一层拓扑图架构,二层拓扑图架构,三层拓扑图架构,多层拓扑图架构. 按照分层的拓扑图部署是按照需求来划分的,一层拓扑图 ...

  4. TreeSet两种比较

    TreeSet底层数据结构是二叉树 判断对象是否一致是通过是对象自身有比较的方法,即使类实现Comparable接口,重写compareTo方法,自己定义比较规则, 若是不想用元素本身的比较方法,又不 ...

  5. &lbrack;原创&rsqb; IAR7&period;10安装注册教程

    代码开发简单化的趋势势不可挡,TI 公司推出的 IAR7.10 以上版本,集成代码库,方便初学者进行学习移植.本教程详细列出IAR7.10安装以及注册步骤,不足之处望多多交流. 好了进入正题. 第一, ...

  6. js禁止开发者工具

    $(document).keydown(function() { return key(arguments[0]) }); function key(e) { //f12 var keynum; if ...

  7. Python之&lowbar;&lowbar;new&lowbar;&lowbar;方法

    # -*- coding: utf-8 -*- """ Created on Sun Dec 2 11:03:03 2018 Python类构造过程 @author: z ...

  8. oracle中的对象创建及删除语句【原创】

    oracle对象 1.表 a)创建表1 create table students( id number(10), stuno number(10) , sex varchar2(2), age in ...

  9. 更改centos源为aliyun

    完全参考 http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/C ...

  10. spring 状态机

    前言:“状态机”见名知意,用状态去管理业务操作,打个比方:0~1岁(出生状态),1~3岁(认知状态),3~6岁(启蒙状态),6~22岁(学习状态),22~60(工作状态),60以后(退休状态),那么人 ...