Java中利用socket实现简单的服务端与客户端的通信(基础级)

原创 2015年11月25日 18:41:35

在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程。上一篇文章的链接:Java中利用socket实现简单的服务端与客户端的通信(入门级)

这次,我们将上一节中的代码进行少许的更改,将服务器更改为多线程,使得服务器可以为多个客户端服务。

因为是服务器端实现的多线程,所以客户端的代码不用做任何更改,和上一篇中的一样。只需要对服务端的代码进行稍许更改即可。

在项目中新建一个类,这个类就是线程类,所以要继承自Thread类,该类的代码如下:

package server_1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class MyThread extends Thread {
	//
	Socket socket=null;
	
	public MyThread(Socket socket) throws Exception{
		this.socket=socket;
	}
    public void run(){
    	BufferedReader in = null;  
    	try {
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} //启动缓冲区 
        //out = new PrintWriter(client.getOutputStream());  
        while (true) {  
              String msg=null;
			try {
				msg = in.readLine();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} // 将客户端发送来的信息存储在msg中 
              System.out.println(msg);  
              if (msg.equals("shutdown")) {  //客户端如果发送的是shutdown,就关闭客户端
                    break;  
              }  
         }
         try {
			in.close();
			socket.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} //执行相应的关闭操作         
    	
    }
    
    	
   
}
在上述代码中,MyThread的构造函数将socket传入类内部的socket中,同时,将通信的 主要任务都写在了这个线程类中。

以下是主类中的代码:

package server_1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class server_1 {  
	public static void main(String[] args) throws Exception { //将异常全部抛出 
        ServerSocket server = new ServerSocket(10000);    //用serversocket来启动服务器,并指定端口号
        System.out.println("服务器启动。。。");
        int count=0;
        while(true){
        	Socket socket = server.accept();  //获取客户端的socket信息
            MyThread mythread=new MyThread(socket);
            mythread.start();
            count++;
            System.out.println("客户端数量为:"+count);
        }
        //server.close();    
            //PrintWriter out = null;  
               
       //}      
    }  
}
可以看到,此次在服务端加了一个没有退出条件的循环操作,循环中监听网络中的socket信息,当有客户端连接的时候,就讲这个socket传给一个线程去执行,同时显示出目前连接到服务端的客户端的数量。

测试时,先运行服务端,然后打开两次客户端,分别像服务端发送数据,可以看到服务端可以显示出连接的客户端的数量,并且可以正常的显示客户端发送过来的数据。




2015年11月19日   西安交通大学



版权声明:本文为博主原创文章,未经博主允许不得转载。

java 客户端和服务器端相互通信(都是从控制台输入)

一、客户端的程序(没用线程,本来想建的,但又觉得麻烦,我是个懒人) package day133; import java.io.*; import java.net.Socket; ...
  • haikuotiankong1997
  • haikuotiankong1997
  • 2012年04月25日 20:15
  • 4676

一个 Java 的 Socket 服务器和客户端通信的例子

一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:         先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端...
  • defonds
  • defonds
  • 2012年09月12日 15:21
  • 138629

Java中使用socket实现客户端与服务端交互

Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取...
  • min996358312
  • min996358312
  • 2017年03月15日 17:10
  • 1455

详解基于java的Socket聊天程序——客户端(附demo)

这篇文章主要介绍了详解基于java的Socket聊天程序——客户端(附demo),客户端设计主要分成两个部分,分别是socket通讯模块设计和UI相关设计。有兴趣的可以了解一下。 写在前面:...
  • maguanghui_2012
  • maguanghui_2012
  • 2017年02月07日 14:05
  • 912

Java通信之客户端的创建以及客户端和服务器的简单交互

Java通信之客户端的创建以及客户端和服务器的简单交互 一、客户端的创建 现在所使用的是windows自带telnet客户端,并且只能发送英文,今天我们将自己创建客户端,并让客户端和服务器进行简答...
  • BlueSky_USC
  • BlueSky_USC
  • 2017年01月14日 01:27
  • 3642

Java服务器与客户端的通信中对象流的使用

在使用java对象流的时候,首先要保证通信双方各有一个公用的包,里面的内容相同,注意异常的抛出。 相同的包 package common; public class User implement...
  • wuxiushu
  • wuxiushu
  • 2016年07月22日 11:19
  • 1239

Java中利用socket实现简单的服务端与客户端的通信(入门级)

Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍。首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特...
  • qq_25352981
  • qq_25352981
  • 2015年11月19日 18:15
  • 4361

java-基本的Socket编程-实现服务器端和客户端通信

基本的Socket编程: 本实例介绍Socket编程的基本步骤。启动Socket服务后,再打开Socket刻画段,在输入框中输入消息,然后发送给服务器端,服务器端将收到的消息返回到客户端。关键技术:...
  • zlz18225318697
  • zlz18225318697
  • 2016年10月12日 17:48
  • 2849

TCP编程2: 客户端给服务器端发信息,服务器端将信息打印到控制台上,同时发送"已收到信息"给客户端

客户端给服务器端发信息,服务器端将信息打印到控制台上,同时发送"已收到信息"给客户端...
  • motianlundejiyi
  • motianlundejiyi
  • 2015年05月08日 14:24
  • 1287

客户端输入字母数据,发送给服务端,服务端收到数据后,将其转换成大写字母发送到客户端,并打印到控制台

客户端: package chat.tcp; import java.io.BufferedReader; import java.io.IOException; import java....
  • fandoudou123
  • fandoudou123
  • 2015年10月27日 15:12
  • 1362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中利用socket实现简单的服务端与客户端的通信(基础级)
举报原因:
原因补充:

(最多只允许输入30个字)