案例:在案例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)相关推荐

  1. python 网络编程 套接字的初使用 基于TCP协议的socket

    文章目录 基于TCP协议的socket server端 client端 尝试启动 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 # ...

  2. TCP流式套接字的异步事件WSAAsyncSelect编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! WSAA ...

  3. 创建一个TCP流式套接字

    #python网络套接字模块 from socket import *HOST = '172.60.50.218' PORT = 8888 ADDR = (HOST,PORT) BUFFERSIZE ...

  4. 【计算机网络】--- 流式套接字通信

    流式套接字通信 引言 TCP协议的传输特点(面试官常考点) TCP的首部 TCP首部个字段的含义如下(大致掌握) TCP连接的建立和终止(面试官必考) "三次握手".如下图所示 注 ...

  5. 流式套接字(SOCK_STREAM),数据报套接字 (SOCK_DGRAM) 的比较

    1.流式套接字 使用这种套接字时,数据在客户端是顺序发送的,并且到达的顺序是一致的.比如你在客户端先发送1,再发送2,那么在服务器端的接收顺序是先接收到1,再接收到2,流式套接字是可靠的,是面向连接的 ...

  6. java socket 通信协议_java 基于TCP协议的Socket编程和通信

    java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...

  7. 基于TCP协议的Socket网络通信

    前言 一. 什么是网络(了解七层网络模型)? 二. 什么是TCP/UDP协议? 三.什么是socket? 定义 四.基于TCP协议的socket通信的实现步骤是怎样的? 客户端的实现 服务端的实现 测 ...

  8. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  9. 基于Http协议的Android网络编程

    之前写过一篇Android网络编程<浅谈android网络编程>,随着了解了更多Android知识,我意识到HttpClient已经不推荐使用了,更是在Android 6.0中被废弃了,原 ...

最新文章

  1. mongodb 入门
  2. [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
  3. 清除浮动(clearfix)
  4. Java数据结构与算法:栈
  5. python telnet 交互_用Python怎么telnet到网络设备
  6. echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
  7. 最长公共子字符串(动态规划)
  8. ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务
  9. Android之Android studio如何解决Multiple dex files define Landroid/support/a(文件重复引用错误)
  10. 在Completablefuture和Observable之间转换
  11. 用Redis存储Tomcat集群的Session
  12. android.os.log,android.os.Handler和java.util.logging.Handler之间的区别?
  13. 【LOJ#2507】[CEOI2011]Matching(KMP,树状数组)
  14. webStorm 修改 JavaScript 版本为 ES6
  15. cfd计算机模拟,cfd模拟(cfd模拟软件)
  16. 小猿日记(5)- 520特别篇
  17. PLC1200 模拟量采集
  18. win10 自带卸载流氓软件工具
  19. sem学习的内容sem学习步骤sem适合的人群
  20. 从事热爱的工作和积极乐观

热门文章

  1. 暑假爆零欢乐赛SRM08题解
  2. 备份一张iPhone拍照写入exif中的orientation图片
  3. ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
  4. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  5. lftp 4.4.0 发布,命令行的FTP工具
  6. jdbc 日期时间相关的类型
  7. no match for call to ‘(std::__cxx11::string {aka std::__cxx11::basic_string
  8. .NET支持的泛型约束
  9. 如何在cnblogs中插入LaTeX数学公式
  10. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定