流式套接字:基于TCP协议的Socket网络编程(案例2)
案例:在案例1的基础上实现一个服务器对应多个客户端(多线程),且获得每个客户端的IP。
线程代码:
package com.yh.mySocket;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket;public class LoginThread extends Thread {Socket socket = null;public LoginThread() {}public LoginThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {// TODO Auto-generated method stubtry {// 获得输入流,获得相应的用户请求InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String info;while((info = br.readLine())!=null) {System.out.println(info);}// 获得客户端IPInetAddress ia = socket.getInetAddress();String ip = ia.getHostAddress();System.out.println("客户端IP地址为:"+ip);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} }
客户端代码(多个客户端代码类似):
package com.yh.mySocket;import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException;public class LoginClient1 {public static void main(String[] args) {Socket socket = null;OutputStream os = null;try {// 创建一个客户端Socket,参数为客户端IP和指定端口号,此处客户端和服务器在同一台电脑,所以IP地址相同socket = new Socket("localhost",5000);// 通过输出流,给服务器发送请求os = socket.getOutputStream();String info = "用户名:YeHuan1; 密码:12345";byte[] infos = info.getBytes();os.write(infos);} catch (UnknownHostException e) {// TODO Auto-generated catch block e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();} finally {try {os.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}} }
服务器代码:
package com.yh.mySocket;import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class LoginServer {public static void main(String[] args) {ServerSocket serversocket = null;Socket socket = null;try {// 创建一个服务器Socketserversocket = new ServerSocket(5000);while(true) {// 使用accept()等待用户的通信socket = serversocket.accept();LoginThread lt = new LoginThread(socket);lt.start();}} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();} finally {try {// 释放资源 socket.close();serversocket.close();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}} }
转载于:https://www.cnblogs.com/YeHuan/p/10792905.html
流式套接字:基于TCP协议的Socket网络编程(案例2)相关推荐
- python 网络编程 套接字的初使用 基于TCP协议的socket
文章目录 基于TCP协议的socket server端 client端 尝试启动 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 # ...
- TCP流式套接字的异步事件WSAAsyncSelect编程
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! WSAA ...
- 创建一个TCP流式套接字
#python网络套接字模块 from socket import *HOST = '172.60.50.218' PORT = 8888 ADDR = (HOST,PORT) BUFFERSIZE ...
- 【计算机网络】--- 流式套接字通信
流式套接字通信 引言 TCP协议的传输特点(面试官常考点) TCP的首部 TCP首部个字段的含义如下(大致掌握) TCP连接的建立和终止(面试官必考) "三次握手".如下图所示 注 ...
- 流式套接字(SOCK_STREAM),数据报套接字 (SOCK_DGRAM) 的比较
1.流式套接字 使用这种套接字时,数据在客户端是顺序发送的,并且到达的顺序是一致的.比如你在客户端先发送1,再发送2,那么在服务器端的接收顺序是先接收到1,再接收到2,流式套接字是可靠的,是面向连接的 ...
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
- 基于TCP协议的Socket网络通信
前言 一. 什么是网络(了解七层网络模型)? 二. 什么是TCP/UDP协议? 三.什么是socket? 定义 四.基于TCP协议的socket通信的实现步骤是怎样的? 客户端的实现 服务端的实现 测 ...
- java socket发送定长报文_一个基于TCP协议的Socket通信实例
原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...
- 基于Http协议的Android网络编程
之前写过一篇Android网络编程<浅谈android网络编程>,随着了解了更多Android知识,我意识到HttpClient已经不推荐使用了,更是在Android 6.0中被废弃了,原 ...
最新文章
- mongodb 入门
- [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
- 清除浮动(clearfix)
- Java数据结构与算法:栈
- python telnet 交互_用Python怎么telnet到网络设备
- echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
- 最长公共子字符串(动态规划)
- ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务
- Android之Android studio如何解决Multiple dex files define Landroid/support/a(文件重复引用错误)
- 在Completablefuture和Observable之间转换
- 用Redis存储Tomcat集群的Session
- android.os.log,android.os.Handler和java.util.logging.Handler之间的区别?
- 【LOJ#2507】[CEOI2011]Matching(KMP,树状数组)
- webStorm 修改 JavaScript 版本为 ES6
- cfd计算机模拟,cfd模拟(cfd模拟软件)
- 小猿日记(5)- 520特别篇
- PLC1200 模拟量采集
- win10 自带卸载流氓软件工具
- sem学习的内容sem学习步骤sem适合的人群
- 从事热爱的工作和积极乐观
热门文章
- 暑假爆零欢乐赛SRM08题解
- 备份一张iPhone拍照写入exif中的orientation图片
- ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
- jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
- lftp 4.4.0 发布,命令行的FTP工具
- jdbc 日期时间相关的类型
- no match for call to ‘(std::__cxx11::string {aka std::__cxx11::basic_string
- .NET支持的泛型约束
- 如何在cnblogs中插入LaTeX数学公式
- 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定