Socket编程——怎么实现一个服务器多个客户端之间的连接

 
 1 package coreBookSocket;
 2
 3 import java.io.IOException;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6
 7 /*
 8  * 这个方法的主要目地是为了用多线程的方法实现网络编程,让多个客户端可以同时连接到一个服务器
 9  *1:准备工作和单个客户端编程类似,先建立服务器端的套接字,同时让客户端那边调用accept()方法来接受服务器端的信息
10  *2:这里面定一个while循环主要是为了让多线程能够一直持续的进行下去,为此while循环开始执行的时候都会先建立
11  *        一个新的线程来处理服务器和客户端之间的连接
12  *3:同时定一个threadedEchoHandler来实现Runnable接口,而该类的主要作用是为了实现客户端循环通信的demo
13  * author:by XIA
14  * data:9.26.2016
15  */
16 public class SimpleServerOfClients {
17     public static void main(String[] args) throws IOException {
18
19         int i=1;
20         ServerSocket server=new ServerSocket(8189);
21         while(true)
22         {
23             Socket client=server.accept();
24             System.out.println("Spawning  "+i);
25             Runnable r=new threadedEchoHandler(client);
26             Thread t=new Thread(r);
27             t.start();
28             i++;
29         }
30     }
31 }
package coreBookSocket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class threadedEchoHandler implements Runnable {
    private Socket client;

    public threadedEchoHandler(Socket i) {
        client=i;
    }

    @Override
    public void run() {
        try {
            InputStream ins=client.getInputStream();
            OutputStream outs=client.getOutputStream();
            Scanner in=new Scanner(ins);
            PrintWriter out=new PrintWriter(outs, true);
            System.out.println("Hello!  Enter bye to exit!");

            boolean done=false;
            while(!done&&in.hasNextLine())
            {
                String line = in.nextLine();
                System.out.println("回应:" + line);
                if (line.trim().equalsIgnoreCase("bye"))
                {
                    done=true;
                }
            }
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
时间: 2024-08-09 15:53:37

Socket编程——怎么实现一个服务器多个客户端之间的连接的相关文章

iOS从零开始学习socket编程——高并发多线程服务器

在上一篇文章<iOS从零开始学习socket编程--HTTP1.0服务器端>中我们已经简单的接触了OC搭建的HTTP服务器. (地址http://blog.csdn.net/abc649395594/article/details/45131373) 出于用户体验和鲁棒性考虑,这里把这个HTTP服务器改进成多线程的. 首先,AnsycSocket这个类是基于OC的Runloop实现的,Runloop实现了方法的异步调用但并不支持多线程. 在这里首先简单区分一下多线程和方法异步调用的区别.他们都

Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)

根据前两周写的关于Socket编程的网络通信的代码,现在对有关知识和注意事项进行总结如下: 1.首先说下Android NIO中有关Socket编程的类: 1)ServerSocketChannel类:服务器套接字通道相当于传统IO下的ServerSocket,通过ServerSocketChannel的socket()可以获得传统的ServerSocket,反过来使用ServerSocket的getChannel()可以获得ServerSocketChannel对象:实例化ServerSock

samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接

事实上这个不是samba的限制.是Windows的限制. 始终要用public=yes的话,上面的方法都不能有效解决,因为: 在打开存在public=yes的samba服务器时,如果首先点击了有public=yes的共享资源的时候,widows会用默认的用户名去连接服务器,一般就是windows的登录名(可以在服务器端查看到的),这时候,再去点击没有public=yes的共享资源,由于使用了user级别,服务器就会要求验证,这时,之前的默认登录已经存在,就出现了楼主的故障了.即使注销连接后如果没

解决 samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接

参考:http://blog.chinaunix.net/u/19637/showart_491257.html怎么解决呢? 事实上这个不是samba的限制.是Windows的限制.始终要用public=yes的话,上面的方法都不能有效解决,因为:在打开存在public=yes的samba服务器时,如果首先点击了有public=yes的共享资源的时候,widows会用默认的用户名去连接服务器,一般就是windows的登录名(可以在服务器端查看到的),这时候,再去点击没有public=yes的共享

socket编程:简单TCP服务器/客户端编程

其实对于socket:我们需要理解的是他提供了一种编程概念,利用socket就可以利用系统已经封装好的内部进行通信,我们只需要关注应用层方面的数据控制就OK了. 一. 套接字(socket) socket英文为插座的意思,也就是为用户提供了一个接入某个链路的接口.而在计算机网络中,一个IP地址标识唯一一台主机,而一个端口号标识着主机中唯一一个应用进程,因此"IP+端口号"就可以称之为socket. 两个主机的进程之间要通信,就可以各自建立一个socket,其实可以看做各自提供出来一个&

Socket编程实践(6) --TCPNotes服务器

僵尸进程过程 1)通过忽略SIGCHLD信号,避免僵尸进程 在server端代码中加入 signal(SIGCHLD, SIG_IGN); 2)通过wait/waitpid方法.解决僵尸进程 signal(SIGCHLD,onSignalCatch); void onSignalCatch(int signalNumber) { wait(NULL); } 3) 假设多个客户端同一时候关闭, 问题描写叙述如以下两幅图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY

socket编程:简单UDP服务器/客户端编程

对于之前的TCP协议而言,他是可靠的字节流传输,而在socket编程中,在不需要保证数据传输正确安全的情况下.或者由用户自己完成传输确认情况/服务端客户端自己实现数据传输.套接字编程也提供了UDP协议的方法. 基于UDP(不是面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)和服务器端进行通信(sendto) (3)关闭套接字 因为在socket编程中,UDP是针对数据报的数据传输,所以socket专门定义了UDP所使用的函数接口.

java网络编程(6)——实现一个服务器把小写转大写

实现一个服务器,通过我们发送的文本数据,然后转回大写放回,实现一个服务端与客户端的交互,用over来作为结束标记,具体代码如下: 客户端: package com.seven.tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; pu

python socket编程 ,tcp,udp服务端客户端创建

转自http://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号