JavaSocket

基于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
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值