JavaSocket

来源:互联网 发布:angular.js教程 编辑:程序博客网 时间:2024/06/05 16:44

基于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;}@Overridepublic 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 blocke.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 blocke.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实例,注意+httpURL 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());//如果未指定端口号,则使用默认的端口号,返回值为-1System.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();}}




原创粉丝点击