【从零学javase 第六天】网络编程(+多线程)
Java 网络编程实战教程从零基础到群聊本文适合刚会 Java 的同学带你从零基础学 Java 网络编程最终实现多客户端群聊。一、网络编程基础概念网络编程就是用程序让两台电脑互相传递信息。IP 地址电脑的网络位置例如127.0.0.1本机端口号程序监听的“门牌号”例如8888客户端Client发送消息服务器Server接收消息TCP可靠通信与 UDP快速通信TCP保证顺序、保证不丢包适合聊天、文件传输UDP不保证顺序、可能丢包适合视频、语音、游戏本文先用 TCP 实现基础聊天程序然后扩展到多客户端和群聊。二、单客户端聊天客户端 服务器服务器端Server.javaimportjava.io.*;importjava.net.*;publicclassServer{publicstaticvoidmain(String[]args)throwsException{ServerSocketservernewServerSocket(8888);System.out.println(服务器启动等待客户端连接...);Socketsocketserver.accept();System.out.println(客户端已连接);BufferedReaderreadernewBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterwriternewPrintWriter(socket.getOutputStream(),true);Stringmsg;while((msgreader.readLine())!null){System.out.println(客户端说msg);writer.println(收到msg);if(msg.equalsIgnoreCase(bye))break;}socket.close();server.close();}}客户端Client.java)importjava.io.*;importjava.net.*;publicclassClient{publicstaticvoidmain(String[]args)throwsException{SocketsocketnewSocket(127.0.0.1,8888);System.out.println(已连接服务器);BufferedReaderconsolenewBufferedReader(newInputStreamReader(System.in));BufferedReaderreadernewBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterwriternewPrintWriter(socket.getOutputStream(),true);Stringmsg;while(true){System.out.print(发送给服务器);msgconsole.readLine();writer.println(msg);if(msg.equalsIgnoreCase(bye))break;Stringreplyreader.readLine();System.out.println(服务器说reply);}socket.close();}}三、多线程服务器同时服务多个客户端importjava.io.*;importjava.net.*;publicclassMultiServer{publicstaticvoidmain(String[]args)throwsException{ServerSocketservernewServerSocket(8888);System.out.println(多线程服务器启动...);while(true){Socketsocketserver.accept();newThread(()-handleClient(socket)).start();}}privatestaticvoidhandleClient(Socketsocket){try{BufferedReaderreadernewBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterwriternewPrintWriter(socket.getOutputStream(),true);Stringmsg;while((msgreader.readLine())!null){System.out.println(客户端说msg);writer.println(收到msg);if(msg.equalsIgnoreCase(bye))break;}socket.close();}catch(IOExceptione){e.printStackTrace();}}}四、群聊功能实现importjava.io.*;importjava.net.*;importjava.util.*;publicclassChatServer{privatestaticListPrintWriterclientsnewArrayList();publicstaticvoidmain(String[]args)throwsException{ServerSocketservernewServerSocket(8888);System.out.println(群聊服务器启动...);while(true){Socketsocketserver.accept();newThread(()-handleClient(socket)).start();}}privatestaticvoidhandleClient(Socketsocket){try{BufferedReaderreadernewBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterwriternewPrintWriter(socket.getOutputStream(),true);synchronized(clients){clients.add(writer);}Stringmsg;while((msgreader.readLine())!null){System.out.println(收到msg);broadcast(msg);if(msg.equalsIgnoreCase(bye))break;}synchronized(clients){clients.remove(writer);}socket.close();}catch(IOExceptione){e.printStackTrace();}}privatestaticvoidbroadcast(Stringmsg){synchronized(clients){for(PrintWriterout:clients){out.println(msg);}}}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414214.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!