博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
流式套接字:基于TCP协议的Socket网络编程(案例2)
阅读量:4678 次
发布时间:2019-06-09

本文共 3152 字,大约阅读时间需要 10 分钟。

案例:在案例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;    }    @Override    public void run() {        // TODO Auto-generated method stub        try {            // 获得输入流,获得相应的用户请求            InputStream is = socket.getInputStream();            BufferedReader br = new BufferedReader(new InputStreamReader(is));            String info;            while((info = br.readLine())!=null) {                System.out.println(info);            }            // 获得客户端IP            InetAddress 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 {            // 创建一个服务器Socket            serversocket = 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

你可能感兴趣的文章
[BZOJ2963][JLOI2011]飞行路线 分层图+spfa
查看>>
setsockopt 设置socket 详细用法
查看>>
JavaScript逻辑运算符 三元表达式
查看>>
用户和角色:通用权限管理系统数据库表结构如何设计?
查看>>
安装pytorch0.4.0
查看>>
做rl_abs过程中遇到的问题
查看>>
spring多模块项目手动整合
查看>>
SpringMVC中文件的上传(上传到服务器)和下载问题(一)--------上传
查看>>
HashMap详解
查看>>
使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
查看>>
6.24 AppCan移动开发者大会:议程重大更新,报名即将关闭
查看>>
java范型集合中的成员排序
查看>>
在.net中读写config文件的各种方法(自定义config节点)
查看>>
ZOJ Problem Set - 2165 Red and Black
查看>>
Qt 程序运行图标
查看>>
matlab Cplex使用
查看>>
(转)[unity3d]easytouch的使用
查看>>
Pascal's Travels
查看>>
Microsoft 家族新成员 Datazen 移动BI 介绍
查看>>
linq to entity GroupBy多个字段
查看>>