基于tcp通信的socket
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 基于TCP通信的Socket,服务器端
*/
public class Server{
public static void main(String[] args) throws IOException {
//1.创建ServerSocket,绑定端口
ServerSocket serverSocket = new ServerSocket(3333);
//2.时刻监听端口
System.out.println("*****服务器已启动等待客户端连接*****");
Socket socket = null;
long count = 0;
while(true){
socket = serverSocket.accept();
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
count++;
InetAddress address = socket.getInetAddress();
System.out.println("客户端ip"+address.getHostAddress());
System.out.println("客户端主机名"+address.getLocalHost());
System.out.println("连接本机的数量"+count);
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread{
Socket socket = null;
//初始化
public ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
//1.获取输入流,获取客户端信息
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info;
while((info = br.readLine())!=null){
System.out.println("这里是服务端,客户端说:"+info);
}
socket.shutdownInput();//注意shutdown的顺序
//2.响应客户端
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("我是服务端,欢迎您!");
pw.flush();
socket.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//3.关闭资源
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建socket对象,绑定主机和端口
Socket socket = new Socket("localhost", 3333);
//2.获取输出流,发送信息
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("我是客户端1!");
pw.flush();
socket.shutdownOutput();
//3.响应服务端
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务端说"+info);
}
socket.shutdownInput();
//4.关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();
}
}
基于udp通信的socket
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* 基于UDP通信的Socket,服务器端
*/
public class UDPServer {
public static void main(String[] args) throws IOException {
/*
* 接受客户端信息
*/
//1.创建服务器端,指定端口
DatagramSocket socket = new DatagramSocket(4444);
//2.创建数据包,接受客户端数据
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
//3.接受客户端数据
socket.receive(packet);//此方法在接受信息之前一直阻塞
//4.读取数据
String info = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端说"+info);
/*
* 响应客户端
*/
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data1 = "欢迎您".getBytes();
DatagramPacket packet2 = new DatagramPacket(data1, data1.length, address,port);
socket.send(packet2);
socket.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
* 客户端
*/
public class UDPClient {
public static void main(String[] args) throws IOException {
/*
* 发送数据
*/
//1.定义服务器地址端口号数据
InetAddress address = InetAddress.getByName("localhost");
int port=4444;
byte[] data = "我是客户端".getBytes();
//2.创建数据报,包含要发送的信息
DatagramPacket packet = new DatagramPacket(data,data.length, address, port);
//3.发送数据
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
/*
* 响应服务器数据
*/
byte[] data1 = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(data1, data1.length);
//3.接受客户端数据
socket.receive(packet1);//此方法在接受信息之前一直阻塞
//4.读取数据
String info = new String(data1, 0, packet1.getLength());
System.out.println("我是客户端,服务端说"+info);
socket.close();
}
}
下面关于InetAddress和URL类的例子
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
public class Test1 {
public static void main(String[] args) throws UnknownHostException {
//获取本机InetAddress实例
InetAddress address = InetAddress.getLocalHost();
System.out.println("计算机名"+address.getHostName());
System.out.println("IP"+address.getHostAddress());
//字节数组形式的IP地址
byte[] bytes = address.getAddress();
System.out.println("字节数组形式IP"+Arrays.toString(bytes));
//根据机器名获取InetAddress实例
InetAddress address2 = InetAddress.getByName("169.254.82.89");
//InetAddress address2 = InetAddress.getByName("idea-PC");
System.out.println("计算机名"+address2.getHostName());
System.out.println("IP"+address2.getHostAddress());
}
}
import java.net.MalformedURLException;
import java.net.URL;
public class Test2 {
public static void main(String[] args) throws MalformedURLException {
//创建一个URL实例,注意+http
URL baidu = new URL("http://www.baidu.com");
URL url = new URL(baidu, "/index.html?name=aa#image");
System.out.println("协议:"+url.getProtocol());
System.out.println("主机:"+url.getHost());
System.out.println("文件路径:"+url.getPath());
System.out.println("文件:"+url.getFile());
System.out.println("相对路径:"+url.getRef());
System.out.println("查询字符串:"+url.getQuery());
//如果未指定端口号,则使用默认的端口号,返回值为-1
System.out.println("端口号:"+url.getPort());
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
/*
* URL读取网络上内容
*/
public class Test3 {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.baidu.com");
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
while(data!=null){
System.out.println(data);
data = br.readLine();
}
br.close();
isr.close();
is.close();
}
}
最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的