1、Socket通信模型Socket编程的四个基本步骤编写一个服务器程序:ServerSocket只要是网络连接都要求有一个端口public ServerSocket(int port)public Socket accept() throws IOException通过此方法等待客户端的socket进行访问。ServerSocket01服务器端代码:此服务器端的功能非常的简单,就是接收客户端的请求,之后在屏幕上输出哈Windows中有一个telnet命令,通过此命令就可以直接连接到服务器了。客户端收到字符串,同时服务器端显示“客户端回应完毕”只要是符合网络的协议标准,所有的客户端都可以连接到此服
2、务器端上。但是一般情况下,很少说直接去使用telnet连接,往往会编写一个客户端。Socketpublic Socket(String host,int port) throws UnknownHostException,IOException指定一个主机的IP地址和一个端口ClientSocket01客户端代码:验证下效果,和telnet一样哈以上代码验证了,程序需要编写两套程序: 一个是服务器端 另外一个是客户端现在发现所有的代码只是执行一次就完了,那么能不能说执行多次呢?由我的用户可以自己发出中断的指令。这样的做法我们可以做一个Socket经典 Echo程序用户发什么内容,服务器就会回应
3、什么内容:EchoServer代码:importjava.io.*;.*;publicclassEchoServer/此处为了省去处理try.catch直接抛出了异常staticvoidmain(String args)throwsExceptionServerSocket server =null;/输出肯定使用打印流PrintStream out =/服务器肯定也要接收输入BufferedReader buf =/1.实例化一个服务器的监听端server =newServerSocket(9999);/可以使用一种死循环的方式接收内容Socket client =while(true)/不
4、断接收内容client = server.accept();/准备好向客户端输出内容out =PrintStream(client.getOutputStream();/而且客户端要有输入给服务器端buf =BufferedReader(newInputStreamReader(client.getInputStream();/下面先给出一个完整的信息提示out.println(您好!欢迎光临:);输入bye表示退出哈/一个用户要发很多的信息/接收客户端发送而来的内容String str = buf.readLine();if(str=null)/如果str为空就表示退出break;else/
5、如果输入的是bye则表示系统退出(bye.equals(str)/可以对用户发来的信息进行回应ECHO:+str);/进行收尾工作out.close();buf.close();client.close();/如果要关闭服务器时可以设置标志/server.close();看下效果:现在我们用telnet连接上去看下效果输入bye退出连接同时可以多次连接典型的包含了输入和输出EchoClient代码:EchoClient/1.连接服务器client =Socket(localhost,9999);/接收服务器端的输入信息System.out.println(buf.readLine();/之后准
6、备从键盘接收数据BufferedReader in =InputStreamReader(System.in);String userInput =(userInput=in.readLine()!=null)/表示有内容进来,要把内容发送到客户端out.println(userInput);/接收服务器端的回应in.close();但是此程序有一个问题,即:当一个用户操作的时候,其他用户是不能操作的程序是单线程的,所以每次只能一个用户访问。此处如果想解决,则只能使用多线程进行操作。首先需要编写一个线程的类:ThreadServer代码:ThreadServerimplementsRunnab
7、le/现在所有的Socket都要归入到一个线程之中privateThreadServer(Socket client)this.client = client;run()/要不断的接收客户发送来的信息String input =/通过BufferedReader进行接收/有一个输出的对象tryInputStreamReader(this.client.getInputStream();while(true)/接收发送过来的信息input = buf.readLine();PrintStream(this.client.getOutputStream();.equals(input)+input
8、);this.client.close();catch(Exception e)EchoServer01服务器端代码:EchoServer01/在此处启动了一个线程Thread(newThreadServer(client).start();使用telnet测试效果哈通过以上代码,可以发现,多线程实际上在服务器上是比较常用的。服务器 = 多线程 + IO + SocketSocket程序实际上是属于TCP程序,是一个稳定的连接UDP程序:数据报程序Send发送端代码:SendDatagramSocket ds =DatagramPacket dp =/发送端必须有一个监视的端口ds =Data
9、gramSocket(9999);String str =;/发送的内容只能是byte数组/接收端端口号是8888dp =DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName(),8888);ds.send(dp);ds.close();信息已经发送出去了哈下面我们再写个接收代码Receive接收端代码:Receive/要有一个空间大小byteb =byte1024;/ds的监听端口就表示发送端指定好的DatagramSocket(8888);DatagramPacket(b,b.length);/开始接收ds.receive(dp);System.out.println(newString(dp.getData().trim();现在我们测试一下哈首先必须接收端开启着然后我们运行发送端发送信息总结网络编程在实际中确实使用越来越少,JAVA的主要特点全部集中在了JAVA WEB上了。只需要了解以下概念即可: 网络程序的分类:TCP、UDP 服务器 = IO + Socket + Thread#本文出自 “王乾De技术博客” 博客,谢绝转载!
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2