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、不需要关闭输入输出流
相关推荐
简单实现了socket单项通信,初学socket成果,分享出来。
socket学习资料,有详细的代码举例,错误分析。
本代码从简单的服务器端获得时间,在客户端获取服务端的时间,是套接字最基本的一个实例
C# 网络编程基础.....Socket篇C# 网络编程基础.....Socket篇C# 网络编程基础.....Socket篇C# 网络编程基础.....Socket篇
可以学习下!关于socket 这项技术,很多项目都应用到,掌握了解对你一定有一定的益处!
socket的基础学习代码,用于认识和学习socket的基本概念。包括TCP和UDP。
linux 基础c 语言基础 c++ 基础 数据结构基础 socket编程基础 ,内容为编代码,供学习复习基础知识编码
socket通信原理 学习socket的好资料 从零基础学习快速掌握
Python学习笔记-基于socket基础的http服务端程序
C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(一)
全套共10个视频,犹豫上传限制,这里是前五个视频,包含socket、TCP、UDP的简单介绍,建立连接客户端的socket等
C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二)
里面主要是对于socket套接字的编程一些基础知识,对于初学者有很大的帮助。
很不错的java学习内容!!!三步学会Java_Socket,有心人请学习!!!
在Socket通信中,发送方和接收方的两个Socket之间必须建立连接,才能在TCP协议的基础上进行通信.一般服务器端Socket先启动,等待客户端的请求,客户端Socket可以向服务器发送连接请求,得到允许后进行连接.一旦这两个...
①Linux基础学习:文件类命令、压缩命令、进程命令、服务器搭建、用户管理、vim学习、gcc/g++编译、linux静态库/动态库、gdb学习、makefile基础学习、C语言文件操作类函数、C语言目录操作函数等; ②linux系统编程...
很简单的windows socket通信基础.开发环境是visual studio 2017,内含服务器端和客户端.能正常通信发消息.但是仍有小错误.需要自行改正,适合学习用.
该压缩包中包含 (1).Net Socket编程基础;(2).NET 中 System.Diagnostics.Process 类应用中碰到的问题;(3)[C#].net平台下完全异步Socket编程的例子;(4)C#.net同步异步SOCKET通讯和多线程总结;(5)Socket使用简介;(6)...
c++网络基础编程socket,简单的讲述网络编程的一些基础知识,适合新手学习。
介绍socket编程的基础,不可错过.从简单的介绍,由浅到深,理论结合实践让你更好学习