`

Socket基础学习

阅读更多

socket服务端需要以下几点:


SocketServer 代码:

 

package com.chen.study.socket.socketServer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import com.sun.jmx.snmp.tasks.ThreadService;

public class SocketServer {
	private static int port = 8000;
	private static String clientcount= "客戶端总數量:";
	private static String clientip= "当前连接客戶端IP:";
	
	/**
	 * @author Administrator
	 * socket服务端
	 */
	public static void SocketServer(){
		try {
			//1.创建SOCKET服务 给定 8000 端口
			ServerSocket socketserver = new ServerSocket(port);
			Socket socket = null;
			int count = 0;
			System.out.println("IP为:"+InetAddress.getLocalHost().getHostAddress()+"" +
					",端口为:"+port+" 的socket服务已经启动,等待客户端的请求.....");
			while(true){
			//2.启动监听,程序处于阻塞状态,等待客户点请求
			socket =  socketserver.accept(); 

                     //未发送完全的数据可以再等3600秒才关闭底层socket
                     socket.setSoLinger(true, 3600);   
			//采用多线程开启一个Socketserver
			ServerThread serverthread = new ServerThread(socket);
                        serverthread.setPriority(4); //设置优先级  0-5
			serverthread.start();
			count++;
			System.out.println(clientcount+count);
			InetAddress address = socket.getInetAddress();
			System.out.println(clientip+address.getHostAddress()+"\n----------------");
			
			
			if(count==3){
				socketserver.close();
				SocketServer();
			}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 主函数启动Socket服务
	 */
	public static void main(String[] args) {
		SocketServer();
	}
}

 添加多线程,实现多客户端链接

 

ServerThread 代码:

 

package com.chen.study.socket.socketServer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerThread extends Thread {
	//创建一个SOCKET类
	private static Socket socket = null;
	private static String severname = "我:";
	private static String clientname = "客户端说:";
	private static String seversay= "你好,服务端收到请求!";
	
	public ServerThread(Socket socket ){
		this.socket = socket;
	}
	//线程执行操作,重写父类RUN方法
	public void run(){

		//3.获取输入流,用来读取客户端发起的信息
		InputStream is  = null;
		BufferedReader br  = null;
		OutputStream os  = null;
		PrintWriter pw = null;
		try {
			is = socket.getInputStream();
		//将字节流转字符流,并给输入流添加缓冲
			br = new BufferedReader(new InputStreamReader(is));
		String info = null;
		while((info=br.readLine())!=null){
			System.out.println(clientname+info);
		}
		socket.shutdownInput();
		
		/*
		 * 回复客户端信息
		 */
		//获取输出流
		os = socket.getOutputStream();
		pw = new PrintWriter(os);
		System.out.println(severname+seversay);
		pw.write(seversay);
		pw.flush();
		socket.shutdownOutput();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				if(pw!=null){
					pw.close();
				}
				if(br!=null){
					br.close();
				}
				if(is!=null){
					is.close();
				}
				if(os!=null){
					os.close();
				}
				if(socket!=null){
					socket.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

 

 

 

客户端

socket客户端代码:
 

package com.chen.study.socket.socketClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
	private static int port = 8000;
	private static String ip = "192.168.119.35";
	private static String clientname = "我:";
	private static String severname = "服务器:";
	private static String clientsay = "你是服务端吗?";
	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		 socketClient();
	}
	
	/**
	 * socket客户端调用服务端
	 * @throws IOException 
	 */
	public static void socketClient() throws IOException{
		Socket socket = null;
		OutputStream os = null;
		PrintWriter pw = null;
		InputStream is = null;
		BufferedReader br = null;
		try {
			// 1.创建SOCkET客户端 ,配置制定的IP 端口
			socket = new Socket(ip, port);
			// 2.创建输出流
			os = socket.getOutputStream();
			pw = new PrintWriter(os);
			System.out.println(clientname+clientsay);
			pw.write(clientsay);
			pw.flush();
			socket.shutdownOutput(); //关闭输出流
			
			//3.获取服务端信息
			is = socket.getInputStream();
			br = new BufferedReader(new InputStreamReader(is));
			String info = null;
			while((info=br.readLine())!=null){
				System.out.println(severname+info);
			}
			socket.shutdownInput();//关闭输入流
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(pw!=null){
				pw.close();
			}
			if(br!=null){
				br.close();
			}
			if(is!=null){
				is.close();
			}
			if(os!=null){
				os.close();
			}
			if(socket!=null){
				socket.close();
			}
		}
	}
}

 
 注意问题:

 

1、多线程 设置优先级

2、不需要关闭输入输出流

 

  • 大小: 191.7 KB
  • 大小: 142.1 KB
分享到:
评论

相关推荐

    简单socket通信,学习使用

    在这个“简单socket通信,学习使用”的项目中,我们可以看到一个基础的Socket通信示例,这对于初学者理解网络通信的基本原理非常有帮助。 首先,我们需要理解Socket的概念。Socket在计算机网络中是一种通信端点,它...

    socket学习资料

    socket学习资料,有详细的代码举例,错误分析。

    socket基础学习

    本代码从简单的服务器端获得时间,在客户端获取服务端的时间,是套接字最基本的一个实例

    Socket基础知识笔记

    Socket基础知识是计算机网络编程中的重要概念,主要用于实现进程间的通信,尤其在网络环境中,它使得不同计算机上的应用程序能够相互通信。以下是对Socket基础知识的详细解释: 1. **Socket定义**: Socket,又...

    C# Socket入门学习! Socket入门学习! Socket入门学习!

    在IT行业中,网络编程是构建分布式系统和网络应用的基础,而C#作为.NET框架下的主要编程语言,提供了强大的Socket类库来实现网络通信。本文将深入探讨C# Socket入门学习的关键知识点,帮助初学者理解并掌握Socket...

    php_socket基础编程

    此标题指的是一本适合初学者了解和学习 PHP Socket 编程的基础指南。 #### 描述:一本有利于刚开始接触 PHP Socket 编程的基础教程。 这本教程旨在帮助初学者快速入门 PHP Socket 编程,并通过实例和讲解来加深...

    C#基础socket学习视频-1.zip

    1. **Socket基础**:Socket是网络通信的基础,它在应用层和传输层之间提供接口。在C#中,Socket类位于System.Net命名空间下,通过创建Socket实例,开发者可以进行发送和接收数据的操作。 2. **TCP(Transmission ...

    socket基础知识

    ### Socket基础知识概述 在计算机网络通信领域中,`socket`是一种重要的编程接口,它使得不同计算机之间能够通过网络进行数据交换。本篇文章将基于提供的文件信息来深入探讨`socket`的基础概念及其在C#中的应用。 ...

    C# Socket学习实例

    Socket编程在IT行业中是网络通信的基础,特别是在C#这样的编程语言中,它是构建客户端-服务器应用程序的关键技术。本文将深入探讨C#中的Socket编程,并基于提供的文件名"SocketServerAndClient.rar"和"socket.zip"来...

    Socket网络编程学习笔记

    这份"Socket网络编程学习笔记"涵盖了从基础概念到高级技术的全面知识,对于初学者来说是一份非常有价值的参考资料。以下是对这份笔记内容的详细解读: 1. **Socket基本概念**:Socket在计算机网络中扮演着桥梁的...

    socket编程基础

    Socket编程是计算机网络通信...通过学习TCP和UDP的使用、Socket的创建、连接、数据传输以及异常处理,开发者可以构建出高效、稳定的网络应用程序。在实际项目中,还需要结合具体需求,灵活运用各种网络编程技巧和策略。

    linux 基础c 语言基础 c++ 基础 数据结构基础 socket编程基础

    在IT领域,Linux、C语言、C++以及数据结构和Socket编程是计算机科学与软件工程的基础,对于任何希望深入理解操作系统、系统级编程或者网络应用开发的开发者来说,这些都是不可或缺的知识点。 首先,我们来详细了解...

    SSocket 实例代码 demo 是初学者不可多得的Socket编程学习资料

    Socket编程在IT行业中是网络通信的基础,特别是在Java领域,它被广泛用于构建客户端-服务器应用程序。"SSocket 实例代码 demo" 提供了一个强大的学习资源,对于初学者来说,能够帮助他们快速理解和掌握Socket编程的...

    java socket学习

    在这个基础学习代码中,我们将深入理解Socket的基本概念,涵盖TCP和UDP两种主要的传输协议。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP中,数据被分成...

    socket基础(服务端 客户端)

    在本教程中,我们将深入探讨Socket的基础知识,包括服务端和客户端的创建与交互。 首先,让我们了解什么是Socket。Socket,通常被称为套接字,是网络通信中的一个抽象概念,它允许两个程序通过网络进行数据交换。在...

    socket通信原理 学习socket的好资料

    socket通信原理 学习socket的好资料 从零基础学习快速掌握

    VC++6.0中socket编程学习教程汇集

    总的来说,这个压缩包提供的资源全面覆盖了VC++6.0中的Socket编程,从理论基础到实战技巧,对于想要学习或提升Socket编程技能的开发者来说,是一份非常宝贵的资料集合。通过深入学习这些内容,开发者不仅可以理解...

    Android学习之Socket通信

    在 Java 中,Socket 和 ServerSocket 类是进行 Socket 通信的基础。Socket 类代表客户端,ServerSocket 类代表服务器端。以下是一些常用的构造方法: - `Socket(InetAddress address, int port)`:创建一个连接到...

    C# SocketClient 基础版

    在IT行业中,网络通信是不可或缺的一部分,而Socket编程则是实现客户端和服务器端通信的基础。本文将深入探讨"C# SocketClient 基础版"的相关知识点,帮助开发者理解如何在C#环境中构建一个基本的Socket客户端。 ...

Global site tag (gtag.js) - Google Analytics