多线程启动-网络通讯
package net_app;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InterAdderssDemo1 {
public static void main(String[] args) {
try {
InetAddress address=InetAddress.getLocalHost();
System.out.println("主机名:"+address.getHostName());
System.out.println("主机地址:"+address.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
package net_app;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InterAdderssDemo1 {
public static void main(String[] args) {
try {
//本地地址ip对象的获取
InetAddress address=InetAddress.getLocalHost();
System.out.println("主机名:"+address.getHostName());
System.out.println("主机地址:"+address.getHostAddress());
//获取域名ip对象
InetAddress address1=InetAddress.getByName("www.baidu.com");
System.out.println("主机名:"+address1.getHostName());
System.out.println("主机地址:"+address1.getHostAddress());
//获取公网的ip地址对象
InetAddress address3=InetAddress.getByName("110.42.192.92");
System.out.println("主机名:"+address3.getHostName());
System.out.println("主机地址:"+address3.getHostAddress());
//判断是否可以ping通
System.out.println(address3.isReachable(5000));
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果:
主机名:DESKTOP-S2VBNQD
主机地址:192.168.3.127
主机名:www.baidu.com
主机地址:220.181.38.150
主机名:110.42.192.92
主机地址:110.42.192.92
trueProcess finished with exit code 0
UDP通讯
TakePro发送端
package net_app;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
public class TakeProt {
public static void main(String[] args) {
try{
//发送
DatagramSocket take=new DatagramSocket();
byte[] data="这是发送端需要发送的信息".getBytes();
//发送的资源包
DatagramPacket packet=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),9999 );
take.send(packet);
System.out.println("数据已经发送");
take.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
SendPort接受端
package net_app;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class SendPort {
public static void main(String[] args) {
//接受
try {
byte[] data=new byte[1024*64];
//接受的数据包
DatagramPacket pake=new DatagramPacket(data,data.length);
DatagramSocket take=new DatagramSocket(9999);
take.receive(pake);
int len=pake.getLength();
String s=new String(data,0,len);
System.out.println("接受到的数据包:"+s);
take.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
UDT通讯
package net_app;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class SendPort {
public static void main(String[] args) {
try {
byte[] data=new byte[1024*64];
//接受
DatagramSocket take=new DatagramSocket(9999);
while (true) {
//接受的数据包
DatagramPacket pake=new DatagramPacket(data,data.length);
take.receive(pake);
int len=pake.getLength();
String s=new String(data,0,len);
System.out.println("接受到"+pake.getAddress()+"的数据包:"+s);
if("exit".equals(s)){
take.close();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package net_app;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class TakeProt {
public static void main(String[] args) {
try{
//发送
DatagramSocket take=new DatagramSocket();
Scanner scanner=new Scanner(System.in);
String s;
while (true) {
System.out.println("请说:");
s=scanner.nextLine();
byte[] data=s.getBytes();
//发送的资源包
DatagramPacket packet=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),9999 );
take.send(packet);
if("exit".equals(s)){
take.close();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
组播与广播
TCP通讯
客服端数据发送
package Socket;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClientDome1 {
public static void main(String[] args) {
try {
InetAddress host=InetAddress.getLocalHost();
Socket s=new Socket(host.getHostAddress(),2580);
OutputStream out=s.getOutputStream();
PrintStream p=new PrintStream(out);
p.print("TCP 的通讯开始");
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端接受数据
package Socket;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketDome1 {
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(2580);
Socket s=server.accept();
System.out.println();
byte[] b=new byte[1024*6];
InputStream i=s.getInputStream();
int len=i.read(b);
System.out.println(new String(b,0,len));
} catch (Exception e) {
e.printStackTrace();
}
}
}
TCP的多发多收
服务端
package SocketDome1;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class ServerSocketDome {
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(2580);
Socket s=server.accept();
InputStream i=s.getInputStream();
BufferedReader b=new BufferedReader(new InputStreamReader(i));
String str;
// System.out.println("主机ip: "+" 主机端口: "+server.getLocalPort()+"接受信息:"+str);
while(null!=(str=b.readLine())){
i=s.getInputStream();
b=new BufferedReader(new InputStreamReader(i));
System.out.println("主机ip: "+s.getRemoteSocketAddress()+"接受信息:"+str);
if("exit".equals(str)){
break;
}
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端
package SocketDome1;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
//客户端
public class SocketClientDome {
public static void main(String[] args) {
try {
InetAddress host=InetAddress.getLocalHost();
Socket s=new Socket(host.getHostAddress(),2580);
Scanner sc=new Scanner(System.in);
OutputStream out1=s.getOutputStream();
PrintStream p=new PrintStream(out1);
String str=null;
while (true) {
System.out.println("请输入:");
str=sc.nextLine();
p.print(str+"\n");
if("exit".equals(str)){
out1.close();
s.close();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
利用多线程实现多发多收
多线程类
package SocketDome3;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class MySocketThread extends Thread {
private Socket s;
public MySocketThread(Socket s) {
this.s = s;
}
@Override
public void run() {
String str = null;
InputStream i = null;
try {
i = s.getInputStream();
BufferedReader b = new BufferedReader(new InputStreamReader(i));
while (null != (str = b.readLine())) {
System.out.println("主机ip: " + s.getRemoteSocketAddress() + "接受信息:" + str);
if ("exit".equals(str)) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端
package SocketDome3;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class ServerSocketDome {
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(2580);
while(true){
Socket s=server.accept();
MySocketThread m=new MySocketThread(s);
m.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端
package SocketDome3;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
//客户端
public class SocketClientDome {
public static void main(String[] args) {
try {
InetAddress host=InetAddress.getLocalHost();
Socket s=new Socket(host.getHostAddress(),2580);
Scanner sc=new Scanner(System.in);
OutputStream out1=s.getOutputStream();
PrintStream p=new PrintStream(out1);
String str=null;
while (true) {
System.out.println("请输入:");
str=sc.nextLine();
p.print(str+"\n");
if("exit".equals(str)){
out1.close();
s.close();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
TCP多台客户端通过线程池发送数据
多线程启动
/**
* 线程启动
* */
package SocketDome3;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class MySocketThread extends Thread {
private Socket s;
public MySocketThread(Socket s) {
this.s = s;
}
@Override
public void run() {
String str = null;
InputStream i = null;
try {
i = s.getInputStream();
BufferedReader b = new BufferedReader(new InputStreamReader(i));
while (null != (str = b.readLine())) {
System.out.println("主机ip: " + s.getRemoteSocketAddress() + "接受信息:" + str);
if ("exit".equals(str)) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端接受数据
package SocketDome3;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//服务端
public class ServerSocketDome {
private static ExecutorService poll=new ThreadPoolExecutor(3,5,6, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(2));
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(2580);
while(true){
Socket s=server.accept();
System.out.println(s.getRemoteSocketAddress()+"上线成功");
Runnable tager=new MySocketThread(s);
poll.execute(tager);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端发送数据
package SocketDome3;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
//客户端
public class SocketClientDome {
public static void main(String[] args) {
try {
InetAddress host=InetAddress.getLocalHost();
Socket s=new Socket(host.getHostAddress(),2580);
Scanner sc=new Scanner(System.in);
OutputStream out1=s.getOutputStream();
PrintStream p=new PrintStream(out1);
String str=null;
while (true) {
System.out.println("请输入:");
str=sc.nextLine();
p.print(str+"\n");
if("exit".equals(str)){
System.out.println(s.getRemoteSocketAddress()+"已经下线");
out1.close();
s.close();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}