Java Socket通信 客户端与服务器端的连接 和信息传输
2016-07-14 16:12
387 查看
一.建立客户端和服务器端的连接。
方法分2步:1.在客户端创建Socket对象,用来发送连接请求
2.在服务器端穿件ServerSocket对象,用来接收请求。
//客户端
public class socket1 {
Socket socket;
public static void main(String[] args) {
new socket1().setUpInternetWoring();
}
void setUpInternetWoring(){
try {
//建立Socket对象设置要连接的IP地址和客户端的端口号
socket = new Socket("127.0.0.1",888);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close(); //要关闭
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//服务器端
public class server1{
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(888);//建立监听对象sever 监听端口号888
Socket LinkSocket = server.accept(); //接收请求信息 并返回请求对象
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
}
}
二.实现客户端和服务器端的通信。
方法很简单:对客户端而言,一方面要接收信息,另一方面要发送信息。
对服务器端而言,和客户端是一样的。
为了实现这两个功能,用到了I/O流。使用socket是两个函数:
1.getInputStream();
从建立的通道中读取信息
2.getOutputStream();
向建立的通道中写入信息
具体方法是:
1:建立BufferedReader的对象来存储通道中读取的信息
2:建立PrintWriter的对象,通过println()方法向通道中写入信息
客户端通信伪代码:
Socket socket;
BufferedReader reader;
PrintWriter writer;
void setUpInternetWoring(){
try {
//建立Socket对象设置要连接的IP地址和客户端的端口号
socket = new Socket("127.0.0.1",888);
System.out.println("连接成功");
//读信息
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = null;
while((message = reader.readLine())!=null){
System.out.println(message);//读取到的信息
}
//写信息 服务器端通过reader读到的信息就是这里发送的信息
writer = new PrintWriter(socket.getOutputStream());
writer.println("要发送的信息,怎么输入的都行");
writer.flush();//刷新,让服务器端马上接收到信息
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
//用完要关闭,避免资源浪费
reader.close();
writer.close();
socket.close(); //要关闭
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其实服务器端和客户端代码是一样的。
服务器端通信伪代码:
BufferedReader reader;
PrintWriter writer;
Socket LinkSocket;
void setUpNetworking(){
try {
ServerSocket server = new ServerSocket(888);//建立监听对象sever 监听端口号888
LinkSocket = server.accept(); //接收请求信息 并返回请求对象
//读信息
reader = new BufferedReader(new InputStreamReader(LinkSocket.getInputStream()));
String message = null;
while((message=reader.readLine())!=null){
System.out.println(message);
}
//写信息
writer = new PrintWriter(LinkSocket.getOutputStream());
writer.println("要写入 的信息");
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
writer.close();
LinkSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相关文章推荐
- JAVA类属性和对象属性的初始化顺序
- MyEclipse使用心得:SVN插件安装方法
- 利用spring线程池ThreadPoolTaskExecutor发送手机短信
- Java Thread Stop方法以及替换实现
- Activiti基础教程--05流程实例、任务的执行
- mybatis_XML映射配置文件
- java gof 设计模式 目录贴
- 一个可供参考的Java高并发异步应用案例
- spring 自带的定时器task
- java 如何使的float保留2位或者多位小数
- 11.Java 基础 - 泛型
- spring+mvc+mybatis+maven(上传+拦截+json出现下载问题)
- java web 代码
- Java 8指南
- Struts2.0多文件上传下载
- 如何在netbeans下指定jdk
- java源码分析(15)-HashMap
- [java提高篇] java提高篇-----详解java的四舍五入与保留位
- Java的云打印Lodop
- JAVA之集合