网络Socket入门编程
来源:互联网 发布:matlab数组分号 编辑:程序博客网 时间:2024/06/05 10:28
连接、传送与接收
要让客户端能够工作,有三件事必须学:
- 如何建立客户端与服务器之间的初始连接
- 如何传送消息到服务器
- 如何接收来自服务器的消息
一.建立连接
要连接到其他的机器上,我们会需要Socket的连接. Socket是个代表两台机器之间网络连接的对象(java.net .Socket ) 。什么是连接?两台机器之间的一种关系。让两个软件相互认识对对方。最重要的是同者知道如何与对方通信,也就是说知道如何发送数据给对方。
TCP端口只是一个16位宽、用来识别服务器上特定程序的数字。IP地址就好像是门口的号牌,IP地址可以指特定的地方,端口号则是该地址不同的窗口,比如25号窗口处理邮件,80端口处理网页
二.使用BufferedReader从Socket读取数据
1.建立对服务器的Socket连接
Socket so = new Socket(“服务器ip地址”,”端口号”);
2.建立连接到Socket上低层次输入串流的InputStreamReader InputStreamReader stream = new InputStreamReader(so.getInputStream());//从Socket中取得输入串流
3.建立BufferedReader来读取
BufferedReader reader = new BufferedReader(stream);
String message = reader.readLine();
三.用PrintWriter写数据到Socket上
1.对服务器建立Socket连接
Socket so = new Socket(“服务器ip地址”,”端口号”);
2.建立链接到Socket的PrintWriter
PrintWriter writer = new PrintWriter(so.getOutputStream());
3.写入数据
writer.println(“message1”);
writer.print(“message2”);
四.编写简单的客户端程序
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;public class AdviceClient { public void go() { try { Socket so = new Socket("127.0.0.1", 4242); InputStreamReader stream = new InputStreamReader( so.getInputStream()); BufferedReader reader = new BufferedReader(stream);// 链接数据串流 String advice = reader.readLine(); System.out.println("今天你应该:" + advice); reader.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { AdviceClient client = new AdviceClient(); client.go(); }}
这是一个读取本机端口号为4242的客户端程序
五.编写简单的服务器程序
服务器工作方式:
1. 服务器应用程序对特定端口创建出ServerSocket。
ServerSocket ss = new ServerSocket(4242);
这会让服务器应用程序开始监听来自4242端口的客户端请求。
2. 客户端对服务器应用程序建立Socket连接。
Socket so = new Socket(“127.0.0.1”,4242);
客户端得知道IP地址与端口号
3. 服务器创建出与客户端通信的新Socket.
Socket so=ss.accept();
accept()方法会在等待用户的Socket连接时闲置着。当用户连上来时,此方法会返回一个Socket以便与客户端通信。Socket与ServerSocket的端口不相同,因此ServerSocket可以空出来等待其他的用户。
import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class AdviceServer { String[] adviceList = { "好好学习,天天向上", "天道酬勤", "失败是成功之母", "珍惜现在,赢得未来" }; public void go() { try { // ServerSocket会监听客户端对这台机器在4242端口上的要求 ServerSocket ss = new ServerSocket(4242); // 服务器进入无穷循环等待客户端的请求 while (true) { // 客服端请求到达 Socket so = ss.accept(); PrintWriter writer = new PrintWriter(so.getOutputStream()); String advice = getAdvice(); writer.println(advice); writer.close(); System.out.println(advice); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private String getAdvice() { int random = (int) (Math.random() * adviceList.length); return adviceList[random]; } public static void main(String[] args) { AdviceServer server = new AdviceServer(); server.go(); }}
聪明的读者不难发现,以上的简单服务器应用程序是不能够处理多个用户请求。这不是很难,使用不同的线程并让新的客户端取得新的线程就好。
- 网络编程入门-socket
- Socket网络编程入门
- 网络Socket入门编程
- linux socket 网络编程入门
- Linux网络socket编程入门
- [Python]网络编程--socket入门
- 网络编程Socket入门篇
- Linux socket 网络编程入门
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门(转载)
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门
- Java Socket网络编程初级入门[zz]
- java socket网络编程入门一
- Java Socket网络编程初级入门
- inode
- mac brew
- Method Swizzling
- 【菜鸟学安卓】- java.lang.IllegalStateException记录
- Android Studio 2.x com.android.tools.fd.runtime.IncrementalChange $change
- 网络Socket入门编程
- LeetCode 344 Reverse String
- jmeter简单使用
- 10个最好的 JavaScript 动画库和开发框架
- ajax与302响应
- C++文件读写详解(ofstream,ifstream,fstream)
- LeetCode刷题:Linked List Cycle 及其进阶Linked List Cycle II
- XML与HTML的设计区别
- synchronized详解