江苏网站建设公司哪家好,怎么推广游戏叫别人玩,常州外贸公司网站建设,郑州 网站制作socket 是用来进行网络通讯的#xff0c;简单来说#xff0c;远程机器和本地机器各建一个socket#xff0c;然后通过该socket进行连接通讯 socket简单模型图#xff1a; socket的原理图#xff1a; 代码实现#xff1a; 1.创建socket服务端#xff1a;用于处理客户端发送…socket 是用来进行网络通讯的简单来说远程机器和本地机器各建一个socket然后通过该socket进行连接通讯 socket简单模型图 socket的原理图 代码实现 1.创建socket服务端用于处理客户端发送的请求数据 新建socket_server项目添加SocketServer.java然后run main方法服务端处于等待客户端状态。 public class SocketServer {/*** 服务器端口*/private static int port 9999;public static void main(String[] args) {try {//1.创建ServerSocket对象用于让客户端连接ServerSocket serverSocket new ServerSocket(port);//2.线程等待直到收到客户端请求进行处理while(true){System.out.println(等待客户端请求---);Socket socket serverSocket.accept();//收到客户端请求//3.获取输入流对象InputStream用于获取客户端发送的数据InputStream in socket.getInputStream();byte[] b new byte[1024];in.read(b);String req new String(b, 0, b.length);//从0-lengthSystem.out.println(获取客户端数据successreqData req);//4.获取输出流对象OutputStream用于给客户端返回数据OutputStream out socket.getOutputStream();//转大写后返回给客户端out.write(req.toUpperCase().getBytes());//5.结束通信关闭socket关闭流in.close();out.close();socket.close();}} catch (UnknownHostException e) {System.out.println(---找不到服务器的端口---);e.printStackTrace();} catch (IOException e) {System.out.println(---通信错误---);e.printStackTrace();}}
} 2.创建客户端 新建一个socket_client项目添加SocketClient.java public class SocketClient {/*** 服务器ip地址*/private static String host 127.0.0.1;/*** 服务器端口*/private static int port 9999;public static void main(String[] args) {try {//1.创建socket对象用于向服务端发送请求Socket socket new Socket(host, port);//2.获取输出流对象OutputStream用于给服务端输出数据OutputStream out socket.getOutputStream();//输入字符串System.out.println(请输入字符串);Scanner input new Scanner(System.in);String reqStr input.next();//输出到服务器out.write(reqStr.getBytes());//3.获取输入流对象InputStream用于输入服务端返回处理后的数据InputStream in socket.getInputStream();//获取服务端返回的数据byte[] b new byte[1024];in.read(b);//将字节输入到b中String respStr new String(b, 0, b.length);System.out.println(服务端处理后的结果respStr);//4.关闭socket关闭流,结束通信in.close();out.close();socket.close();} catch (UnknownHostException e) {System.out.println(---找不到服务器的端口---);e.printStackTrace();} catch (IOException e) {System.out.println(---通信错误---);e.printStackTrace();}}
} 3.启动客户端 客户端 控制台请输入字符串hello(输入后回车)服务端处理后的结果HELLo--------------------------------------------
服务端 控制台等待客户端请求---获取客户端数据successreqData hello 测试 1.通过C#客户端来访问Java的Socket服务 2.通过IE来访问SocketService accept success.......
从客户端传送来的数据如下:
POST / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xamlxml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:9999 Content-Length: 10 Connection: Keep-Alive Cache-Control: no-cache wordhello 测试结果 1.1: 不同的语言支持Socket通信吗? 支持经测试上面的socketserver端程序使用c#,web浏览器也可以访问 1.2: 不同的协议支持Socket通信吗? web程序可以调用socket请求,但是由于协议不同,因此在处理的时候要过滤http的协议格式,返回的时候还需要添加 http返回的格式 1.3: 如果参数多: 可维护性就比较低 1.4: Socket服务有利于推广吗 不利 总结 * 服务端流程 * 1.创建ServerSocket对象用于让客户端连接 * 2.获取socket对象线程等待直到收到客户端请求 * 3.获取输入流对象InputStream用于获取客户端发送的数据 * 4.获取输出流对象OutputStream用于给客户端返回数据 * 5.结束通信关闭socket关闭流 * * socket和webservice比较缺点 * 1.Socket服务不利于推广(如果让别人知道你的Socket服务) * 2.Socket处于传输层, 有可能无法穿越防火墙 * 3.Socket本身处于传输层,要处理应用层的服务要解析HTTP协议比较麻烦,但是现在我们的应用都是基于web的, web中的数据传输就需要HTTP协议 * 4.即使定义了格式. 后面如果格式改变则客户端格式都需要同步变化维护困难 /** * 客户端流程 * 1.创建socket对象用于向服务端发送请求 * 2.获取输出流对象OutputStream用于给服务端输出数据 * 3.获取输入流对象InputStream用于接受服务端返回处理后的数据 * 4.结束通信关闭socket关闭流 * author mlxs * */ 转载于:https://www.cnblogs.com/yangzhenlong/p/5163293.html