【学习随记】基于TCP的Socket通信之在局域网下的简单通信实例

学习资料来源于慕课网,感谢~
不足之处:
1,未实现多线程;
2,未引入JDBC(用户名、密码相关的操作)。

个人总结:基本掌握了socket通信模型,但是仍然自己无法完完整整的敲出来。还是不熟练的问题。JAVA多人聊天室小项目不容易啊,且行且珍惜吧。

Socket即为套接字地址,用于描述IP+端口地址。
以下是Socket通信模型,个人理解为基本实现步骤:

上面通信模型中提到的I/O相关知识,在之后的学习中,自己会不断跟进、更新。本次只是简单了解加以使用。

查询JDK-9API文档中关于socket和serversocket。
socket: 该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。

套接字的实际工作由socketImpl类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以配置自己创建适合本地防火墙的套接字。
serversocket: 这个类实现了服务器套接字。 服务器套接字等待通过网络进入的请求。 它根据该请求执行一些操作,然后可能将结果返回给请求者。
按照上面给出的实现步骤,以下分别为服务器端和客户端的实现步骤:

代码如下:

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

/*
 * 基于TCP协议的Socket通信,实现用户登陆
 * 服务器 
*/
public class Server {
	public static void main(String[] args) {
		try {
			//1.创建一个服务器端Socket
			ServerSocket serverSocket=new ServerSocket(8888);
			//2.调用accept方法开始监听,等待客户端的连接
			System.out.println("***服务器端即将启动,等待客户端的连接***");
			Socket socket=serverSocket.accept();
			//3.获取输入流,并读取客户端信息
			InputStream is=socket.getInputStream();
			InputStreamReader isr =new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String info=null;
			while((info=br.readLine())!=null) {
				System.out.println("我是服务器,客户端说:"+info);
			}
			//socket.shutdownInput();
			//4.获取输出流,向客户端发送信息
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);//包装为打印刘
			pw.write("登陆成功!");
			pw.flush();
			socket.shutdownOutput();
			
			//4.关闭相关资源
			pw.close();
			os.close();
			br.close();
			isr.close();
			is.close();		
			socket.close();
			serverSocket.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;

/*
 * 基于TCP协议的Socket通信,实现用户登陆
 * 客户端
*/
public class Client {
	public static void main(String[] args) {
		try {
			//1.创建客户端Socket,制定服务器地址和端口
			Socket socket=new Socket("192.168.8.9", 8888);
			//2.获取输出流,向服务器端发送信息
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.write("用户名:admin;密码:123");
			pw.flush();//刷新缓存
			socket.shutdownOutput();//关闭输出流
			//3.获取输入流,并读取客户端信息
			InputStream is=socket.getInputStream();
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String info=null;
			while((info=br.readLine())!=null) {
				System.out.println("我是客户端,服务器端说:"+info);
			}
			socket.shutdownInput();
			
			//4.关闭相关资源
			br.close();
			isr.close();
			is.close();
			
			pw.close();
			os.close();
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
}


注意事项:1,在客户端中寻找同一局域网下IP的方法,两台主机使用同一路由器,直接在路由器管理页面查找服务器端主机Ip即可;
2,服务器端必须先于客户端打开。

实现结果展示:
服务器端:

客户端:

在Console处切换至服务器端:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以在局域网中发送消息的vbs程序,小巧,易用 go.exe 命令参数: /p 图片路径 [-L1 -L2 -H1 -H2 -B1 -Q1] /z 公告内容 /t 公告时长 /n 网吧名称 /u 网址 --------------------------------------------------------------------------------------------- /p 背景路径 /z 公告内容 /t 公告时长 /n 网吧属名 /u 给公告加连接 ( /p /z /n /t )四位参数的组合使用或其中三位与三位以下参数组合时候,参数不分前后,加上/U时一定要按指定格式书写! '当公告在执行的其间,任务管理器失效,自动退出后,任务管理器复原! 1.增加/u参数 必须用上 /p /z /t /n 四个参数之时,/u才存在,否则都会出错!而且要以下面的顺序格式才OK! ----------------------------------------------------------------------------------------------- 1 2 3 4 5 < /p 图片路径 /z 公告内容 /t 公告时长 /n 网吧名称 /u 网址> 例: go /n 盈众网吧 /p Background.jpg /z 请注意好您的贵重物品 /t 5 /u http:\\www.sina.com.cn (注意:网址的斜线必须为"\") ----------------------------------------------------------------------------------------------- 2.增加六种颜色: (注意: 必须使用在公告内存后面,下面有例子) ----------------------------------------------------------------------------------------------- <-L1> <-L2> <-H1> <-H2> <-B1> <-Q1> ~~~字母匀为大写,小写无效~~~~ 蓝 绿 红 黄 白 青 例: go /z 请注意好您的贵重物品,如有丢失,本网吧概不负责 -B1 /t 3 ----------------------------------------------------------------------------------------------- 3. 去掉了广告 4. 加动态移出! 5.链接为“公告内容”

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值