Java socket通信实例,简单入门socket实例代码

是不是看了许多socket入门知识,却还是不能实际运用呢,这篇文章通过利用简单实例程序讲解通过socket实现客户端与服务器之间的通讯。这篇文章可以让你不需要了解socket原理也能利用,便于应急,但建议之后要好好补补关于soket的基础知识。

首先就是上代码,先是服务器端代码SocketServerDemo.java,里面已经有详细注释。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServerDemo {
	private ServerSocket serverSocket;
	public SocketServerDemo(){
		try{
			//设置你服务器监听的端口为10000,用户能使用的端口为1025-65535
			serverSocket = new ServerSocket(10000);
		}catch(IOException e){
			//捕获异常,不懂的话好好看java,
			e.printStackTrace();
		}
		//创建新的监听主线程,这个线程创建ServerSocket监听
		new Thread(new Runnable(){
			public void run(){
				while(true){
					Socket socket = null;
					try{
						socket = serverSocket.accept();
						//当监听到了客户端连接后,创建新线程传输数据,这样可以实现多个客户端同时访问
						new Thread(new SocketHandler(socket)).start();
					}catch(Exception e){
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
	
	class SocketHandler implements Runnable{
		private Socket socket;
		private BufferedReader reader;
		private PrintWriter writer;
		SocketHandler(Socket socket){
			try{
				this.socket = socket;
				reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream(),"GB2312"));
				writer = new PrintWriter(socket.getOutputStream(), true);
				writer.println("-------welcome---------");
				writer.println("-------welcome---------");
				writer.println("-------welcome---------");
			}catch(IOException e){
				e.printStackTrace();
			}
			
		}
		//这里是覆盖实现接口Runnable里的run()
		public void run(){
			try{
				//读取数据,这里只能读取一行String
				String line = reader.readLine();
				System.out.println(line);
			}catch(IOException e){e.printStackTrace();}finally{
				//最后要关闭Socket
				try{
					if(socket!=null)socket.close();
					if(reader!=null)reader.close();
					if(writer!=null)writer.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main(String[] args){
		new SocketServerDemo();
	}
}
客户端代码SocketClientDemo.java:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClientDemo implements Runnable{
	private Socket socket;
	BufferedReader reader;
	private PrintWriter writer;
	public SocketClientDemo(){
		try{
			//127.0.0.1表示本机IP,10000为服务器Socket设置的端口
			socket = new Socket("127.0.0.1", 10000);
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GB2312"));
			writer = new PrintWriter(socket.getOutputStream(), true);
			writer.println("working.............");
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	public void run(){
		try{
			//这里就可以读取所有行String
			String line, buffer="";
			while(!((line = reader.readLine())==null))
				buffer+=line;
				System.out.println(buffer);
		}catch(IOException e){	
			e.printStackTrace();
			System.out.println("problem");
		}finally{
			//最后关闭Socket
			try{
				if(socket!=null)socket.close();
				if(reader!=null)reader.close();
				if(writer!=null)writer.close();
			}catch(IOException e){
				e.printStackTrace();
			}
			
		}
		
	}
	public static void main(String[] args){
		new Thread(new SocketClientDemo()).start();
		
		
	}

}
测试:

可以在同一台电脑上打开两个cmd进行测试,客户端Socket的ip填127.0.0.1,下面介绍在用两台在同一个局域网内的电脑进行测试,这里的区别就是ip怎么填,在作为服务器的电脑中执行以下步骤查找本机在局域网内的ip:

打开“打开网络和共享中心”,点击“”更改适配器设置”,找到正在使用的网卡,点击右键,然后点击“状态”,点击“详细信息”,IPv4地址就是本机在局域网内的地址。

或者在cmd上输入ipconfig,找到正在使用的网卡的ip。

如何通过外网ip访问服务器,首先查询本机的外网ip可以在百度里面输入ip即可看到本机的外网ip,于是同学们把这ip输入到客户端Socket中,编译,运行,不行。。。。。你可以查下在局域网内所有的电脑的外网ip,发现他们外网ip竟然相同,学过计算机网络的知道,局域网中的主机是共享外网ip的。那怎么实现不在局域网的两台电脑之间的通讯呢,这样就要你的电脑有自己的外网ip,我的做法是申请一个云服务器,腾讯云,阿里云,每台服务器都有唯一的外网ip,自己去玩吧。第一篇博客就到这里了。



你可能感兴趣的:(Java socket通信实例,简单入门socket实例代码)