Java Socket第一个通讯程序的具体实现及常见问题的分析
来源:互联网 发布:手机淘宝网店 编辑:程序博客网 时间:2024/06/06 17:17
<一>搭建服务器类
服务器的搭建具体分为三个步骤:
a:创建一个服务器套接字,并指定端口号。如:
ServerSocket server=new ServerSocket(8888)。这里的构造方法中的参数就是int port,端口号。这里我们要保证(port>1023),因为前面的端口已经被具体的应用程序占了,如果这里强制port<1023的话,可能会发生一些不可预知的错误。
b:创建一个客户端的实例socket来连接服务器。如:
Socket client=server.accept()。在服务器server没有连接到客户端之前,该语句会一直处于阻塞状态。一旦获取到实例,程序往下执行。
c:对连接后实例化的client对象进行信息交流操作。
①获取输入流。
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));②操作输入流,获取客户端的信息:
//get input streamBufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));String infoFromClient=null;while((infoFromClient=in.readLine())!=null){System.out.println("Server get InfoFromClient:"+infoFromClient);//print the information from client}client.shutdownInput();//close input stream !Important特别注意:这里使用完毕输入流的信息之后必须关闭输入流。不然会影响到输出流的信息交换。
③获取输出流。
//get output streamPrintWriter writer=new PrintWriter(client.getOutputStream())
④操作输出流,向客户端传递消息:
writer.println("hello,Client.I am server");writer.flush();⑤关闭打开的资源,输入输出流和客户端
writer.close();in.close();client.close();
<二>客户端类的搭建
客户端类的搭建大部分和服务器端类似。
①创建一个Socket用来连接服务器,请求连接。(即被accpet()方法侦听到)
Socket client=new Socket("localhost", 8888);//get connection to server;特别注意:这里localhost为你服务器所在的主机名,我这里的这个demo由于是在自己的电脑上,所以直接用“localhost”(127.0.0.1),客户端的端口和服务器端创建的端口要一致,否则无法连接到。
②建立连接后,可以获取输入输出流,具体方法参见服务器端的介绍。
<三>demo源码
Client.java
package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;/* * 创建Socket对象,指明需要连接的服务器的地址和端口 * 建立连接后,通过输出流向服务器发送请求信息 * 通过输入流获取服务器的响应信息 * 关闭相应资源 * */public class Client {public static void main(String[] args) throws UnknownHostException, IOException {// TODO Auto-generated method stub Client client=new Client(); client.onStart();}private void onStart() throws UnknownHostException, IOException {// TODO Auto-generated method stubSocket client=new Socket("localhost", 8888);//get connection to server; System.out.println("****client connect to server****");//get output stream first !importantPrintWriter out=new PrintWriter(client.getOutputStream());BufferedReader inconsole=new BufferedReader(new InputStreamReader(System.in));//input message from console System.out.println("please input message to server:");String infoToServer=inconsole.readLine();while(infoToServer!=null){ out.write(infoToServer); out.flush(); infoToServer=inconsole.readLine(); // break;}System.out.println("send successfully!");client.shutdownOutput();//close the outputStream//get input streamBufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));String infoFromServer=null;while((infoFromServer=in.readLine())!=null){System.out.println("Client get InfoFromServer:"+infoFromServer);}//close allinconsole.close();in.close();out.close(); client.close();}}Client.java
package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/*服务器端 a)、创建ServerSocket对象绑定监听端口。 b)、通过accept()方法监听客户端的请求。 c)、建立连接后,通过输入输出流读取客户端发送的请求信息。 d)、通过输出流向客户端发送请求信息。 e)、关闭相关资源。 author:zipple;2017-1-13 bug:服务器端无法发送请求到客户端* */public class Server {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub Server server=new Server(); server.onStart();}private void onStart() throws IOException { System.out.println("*************loading****************");ServerSocket serverSocket=new ServerSocket(8888);//new a server System.out.println("server started successfully,wait for client...");Socket client = serverSocket.accept();//get connection//get input streamBufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));String infoFromClient=null;while((infoFromClient=in.readLine())!=null){System.out.println("Server get InfoFromClient:"+infoFromClient);//print the information from client}client.shutdownInput();//close input stream !Important//get output streamPrintWriter writer=new PrintWriter(client.getOutputStream());writer.println("hello,Client.I am server");writer.flush();writer.close();in.close();client.close();}}
1 0
- Java Socket第一个通讯程序的具体实现及常见问题的分析
- 我的第一个socket程序!
- 第一个使用socket的源码分析
- java的第一个程序
- Java的第一个程序
- JAVA的第一个程序
- 配置及运行你的第一个java程序
- 01--初识java及我的第一个小程序
- 第一个Android的完整程序(UDP通讯工具)
- 第一个Java程序的HelloWorld的实现
- java第一个程序helloworld的实现及其注意事项
- Java实现我的第一个程序HelloWorld!
- 分析你的第一个Android程序
- 第一个cocos2d程序的代码分析
- Socket通讯编程实现简单的任意聊天程序
- [java]我的第一个java 程序
- Java第一个程序的第一个错误
- hadoop的第一个程序wordcount实现
- Win10 搭建Hexo博客完全教程
- 抽象类有反射
- SQLServer中char、varchar、nchar、nvarchar的区别:
- 使用wxParse插件直接解析从后台获取的html
- day05--数据类型
- Java Socket第一个通讯程序的具体实现及常见问题的分析
- vim,shiftwidth,tabstop,softtapstop
- Android 界面编程
- (Linux)系统管理
- Hexo-Theme-Buer主题修改介绍
- ISO/IEC 13818 -1 ~ -7之间的区别
- Mariadb使用入门
- vim 退格键(backspace)不能用
- Elasticsearch 5.x (二) 集群模式