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

来源:互联网 发布:saas企业级软件服务 编辑:程序博客网 时间:2024/05/16 07:29

是不是看了许多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-65535serverSocket = 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{//读取数据,这里只能读取一行StringString line = reader.readLine();System.out.println(line);}catch(IOException e){e.printStackTrace();}finally{//最后要关闭Sockettry{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{//这里就可以读取所有行StringString line, buffer="";while(!((line = reader.readLine())==null))buffer+=line;System.out.println(buffer);}catch(IOException e){e.printStackTrace();System.out.println("problem");}finally{//最后关闭Sockettry{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,自己去玩吧。第一篇博客就到这里了。



1 0
原创粉丝点击