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

2023-11-06

是不是看了许多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,自己去玩吧。第一篇博客就到这里了。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java socket通信实例,简单入门socket实例代码 的相关文章

随机推荐

  • 前端canvas绘制水波球

    效果如下图 代码
  • 创建软链接(symbolic link)

    Linux ln命令是一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 类似windows下的快捷方式 Linux文件系统中 有所谓的链接 link 我们可以将其视为档案的别名 而链接又可分为两种 硬链接 hard
  • 计算机视觉学习总结:基本的图像操作和处理(一)

    PIL Python图像处理类库 PIL Python Imaging Library Python 图像处理类库 提供了通用的图像处理功能 以及大量有用的基本图像操作 比如图像缩放 裁剪 旋转 颜色转换等 基本操作 1 读取图片及灰度转换
  • acwing模板整理(第一讲)(基础算法)

    目录 一 归并排序模板 二 二分 需要满足单调性 整数二分和小数二分 三 高精度加减乘除 2 减法 3 乘法 4 除法 四 1 一维前缀和与差分数组 2 子矩阵的前缀和与差分矩阵 二维前缀和与二维差分矩阵 五 双指针算法 找单调性优化 双指
  • 测试——Web网站测试主要测试那些内容

    一般的网站的主要测试内容就分为以下几点 目录 功能测试 性能测试 安全测试 稳定测试 兼容性测试 压力测试 功能测试 功能测试常用到的有效方法 等价划分法 等价划分法就是把输入空间划分为几个 等价区间 在每个等价区间中只需要测试一个典型的数
  • 六、代理模式

    六 动态代理模式 1 模式结构和结构图 1 抽象主题 Subject 类 通过接口或抽象类声明真实主题和代理对象实现的业务方法 1 2 真实主题 Real Subject 类 实现了抽象主题中的具体业务 是代理对象所代表的真实对象 是最终要
  • Linux Power Supply架构及代码解析

    一 概述 电源管理整体上可以分为两个部分 一个是电池监控 fuel gauge 另外一个是充放电管理 这两部分在内核中也是分为两个驱动来管理 fuelgauge驱动的功能主要是负责向上层Android系统提供当前电池的电量和健康信息等等 同
  • redis学习总结

    文章目录 redis数据结构原理 简单字符串SDS 叫Simple dynamic string 链表 字典 跳跃表 redis持久化 RDB持久化 AOF持久化 redis集群三种模式 主从模式 实现主从分离 提高吞吐 多机备份 哨兵模式
  • Python填写问卷星

    主要使用python实现问卷星的自动填写和提交 主要使用了https www jianshu com p 34961ceedcb4的代码 使用了X Forwarded For自动修改ip 我测试的时候是可以使用的 PS 我是在linux下面
  • idea 设置自动添加注释

    添加类注释 打开Settings 点击Apply OK 添加方法注释 添加组 选择test 添加Live Template text如下 Author yeluo Description description param param re
  • JSONObject对象的方法

    JSONObject 是 org json 库中的一个类 用于创建和操作 JSON 对象 以下是一些常用的 JSONObject 方法 1 put key value 向 JSON 对象中添加键值对 jsonObject put key v
  • 锂电池充放电电路设计与分析

    Lithium battery charge 锂电池充放电电路 1 USB插入检测电路 1 1 FUSE1 自恢复保险丝 当后续的电路发生短路等故障时 自动启动保护作用来保护外围的电源 避免损坏 因为经常出事故一般是电源出事故了 电源短路
  • leetcode_第17题_缺失的第一个正数——原地哈希

    题目 题目 分析 正常思路 另外制作一个哈希表 然后遍历就ok 但是这样不符合题目空间复杂度要求 所以采用原地哈希就可以了 思路 把正常数字nums i 交换存储到下标位置为nums i 1的地方 不正常数字不管 正常数字是指 值 1 le
  • linux(ubuntu)下C++访问mysql数据库

    Ubuntu安装msyql 安装mysql数据库 1 sudo apt get install mysql server 安装mysql客户端
  • HTTP服务器(二)

    前面已经实现了服务器的整体框架 现在就来具体实现HTTP服务器处理静态页面的逻辑 要获取具体的静态文件 就要知道要获取的文件的路径 我们分析url 协议方案名 使用http 或https 等协议方案名获取访问资源时要指定的协议类型 登录信息
  • 1.mysql体系结构

    中文文档 mysql 5 1中文文档 一 MySql服务器和客户端 1 客户端和服务器服务器是指安装mysql的那台机器 而客户端是远程通过网络使用服务器上的mysql 客户端通过得知远程服务器的ip地址以及mysql的一些密码信息等使用m
  • “探秘JS加密算法:MD5、Base64、DES/AES、RSA你都知道吗?”

    目录 1 什么是JS JS反爬是什么 JS逆向是什么 2 JS逆向的大致流程 3 逆向的环境搭建 3 1 安装node js 3 2 安装js代码调试工具 vscode 3 3 安装PyExecJs模块 4 JS常见加密算法 4 1 Bas
  • Spring Boot 开启Giz

    Enable response compression server compression enabled true The comma separated list of mime types that should be compre
  • C++关键字

    注意单引号 a 97 A 65 include using namespace std
  • Java socket通信实例,简单入门socket实例代码

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