Java基础篇Socket网络编程中的应用实例
说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法。
要求:客户端通过Socket通信技术上传本地一个文本文件到服务器端(其实就是代替了手动在控制台输入文本),服务器端将客户端上传的文本保存在另一个文本文件中,保存完成后对客户端发送一个“完成保存”的的通知,客户端显示服务器返回的信息并断开和服务器的连接,至此整个通信结束。
以下分两部分来书写完成此任务的代码:
1、客户端:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientSocket{
public static void main(String args[]) throws UnknownHostException,IOException
{
System.out.println("客户端启动了...........");
//1、创建客户端Socket对象同时制定将要连接的服务器的ip地址和端口号
Socket s=new Socket(InetAddress.getByName("192.168.56.4"), 10005);//此处会抛出连接失败的异常,根据自己的需要给出处理办法,这里就直接抛了
//2、设置io操作源,这里有多种选择,因为是操作文本文件,所以就选择可以一行一行读取数据的Io输入流BufferedReader
BufferedReader brfu=new BufferedReader(new FileReader("client.txt"));
//3、设置目的:网络
PrintWriter out=new PrintWriter(s.getOutputStream(),true);//此处也可以选择别的Io输出流,例如:BufferedWriter
//4、开始读取文件内容并上传到服务器端
String line=null;
while((line=brfu.readLine())!=null){
out.println(line);
//此处初学者一定要注意:使用out.print(line);out.flush();也解决不了上传不成功的问题,就是读取文本内容带有回车换行符的原因,如果不使用 out.println(line),当然也可以使用out.print(line+"\r\n")来解决
}
s.shutdownOutput();//此方法是经过socket对象封装后的,目的就是告诉服务器自己发送内容操作结束了,避免服务器阻塞等待而不给客户端发送完成信息
//这里也可以使用发送一个和服务器协商好的结束标示符解决问题,但是那个标示符的选择一定要唯一,并且要做到确保上传文件中不会出现这个标示符(时间的毫秒值)
//5、创建接受服务器端返回数据的IO输入流
BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
//6、输出服务器返回的数据
System.out.println("Server data :"+brIn.readLine());
//7、关闭资源
brfu.close();
s.close();//其他的IO流对象不用关闭了,因为它们都依靠s,s关闭就可以了
}
}
2、服务器端
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServersSocket {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动了....");
//1、创建服务器端对象,同时绑定监听的端口号
ServerSocket ss=new ServerSocket(10005);
//2、获取客户端对象
Socket s=ss.accept();
//3、获取客户端ip地址和客户端名称
String ip=s.getInetAddress().getHostAddress();
String name=s.getInetAddress().getHostName();
System.out.println("接受到来自名称为:"+name+" 和ip为:"+ip+"的连接");
//4、获取IO数据源
BufferedReader brfu=new BufferedReader(new InputStreamReader(s.getInputStream()));
//5、设置目的,创建本地的文本文件
PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true);
//上面的代码等效于BufferedWriter bw=new BufferedWriter(new FileWriter("server.txt"))
//6、开始保存数据的操作
String line=null;
while((line=brfu.readLine())!=null){
out.write(line+"\r\n");
System.out.println(line);
}
//7、创建服务器端源:网络
PrintWriter outSer=new PrintWriter(s.getOutputStream(),true);
outSer.println("接受并保存完成!");
//8、关闭IO和网络资源
out.close();
s.close();
ss.close();
}
}
Java基础篇Socket网络编程中的应用实例的更多相关文章
- Java : java基础(5) Socket网络编程
使用 DatagramSocket 创建一个 UDP协议的Socket, 用DatagramPacket创建一个数据包,可以指定ip和端口号以及包的数据,用socket.send()可以发送这个数据包 ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- socket网络编程中read与recv区别
socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...
- Python之路【第七篇】python基础 之socket网络编程
本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...
- java 基础之--nio 网络编程
在传统的Java 网络编程中,对于客户端的每次连接,对于服务器来说,都要创建一个新的线程与客户端进行通讯,这种频繁的线程的创建,对于服务器来说,是一种巨大的损耗,在Java 1.4 引入Java ni ...
- java架构《Socket网络编程基础篇》
本章主要介绍Socket的基本概念,传统的同步阻塞式I/O编程,伪异步IO实现,学习NIO的同步非阻塞编程和NIO2.0(AIO)异步非阻塞编程. 目前为止,Java共支持3种网络编程模型:BIO.N ...
- Java 基础高级2 网络编程
1.协议的概念:通信双方事先约定好的通信规则 2七层网络通信协议:应用成,表示层,会话层,传输层,网络层,数据链路层 3.TCP/IP协议:点对点通信,三层握手,安全有保证 4.UDP协议;广播协议, ...
- java基础学习总结——网络编程
一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程.
随机推荐
- WebService使用JSON格式传递笔记+JQuery测试
原文WebService使用JSON格式传递笔记+JQuery测试 因为一些因素,必须改写WebService,很传统,但是很多公司还在用.. 因为XML 的关系,不想让他传递数据的时候过度肥大,所以 ...
- 5. SQL Server数据库性能监控 - 当前请求
原文:5. SQL Server数据库性能监控 - 当前请求 对于在线运行的系统,当前数据库性能监控,通常监视以下几点: (1) 是否有阻塞 (Blocking); (2) 是否有等待 (Waitin ...
- java 转成字符串 json 数组和迭代
当你需要转成一串一串的json 排列 .当内容和遍历它们. 首页进口 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包 String str = ...
- hdu5024(dp)
意甲冠军: 薛期呵和王熙凤不想很接近生活(因为假定他们一起,柴可能取代王熙凤) 现在'.'事情是这样的.'#'一堵墙.薛期呵对宝让生活远: 因此,选择一个最长的公路,让他们住在两端: 路达一个转折点. ...
- SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
原文:SQL点滴4-筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息 项目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确.我们 ...
- HTML 5 在Web SQL 使用演示样本
Web sql 这是一个模拟数据库浏览器.可以使用JS操作SQL完成数据读取和写入,但是这件事情并不多,现在支持的浏览器,而其W3C规格已经停止支持.外形似它的前景不是很亮. W3C 规范:http: ...
- 【SSH三个框架】Hibernate第八部分基础:经营-many关系
在Hibernate在-many关系.它通常不使用.由于当数据库查询复杂度太高时. 我们在这里做的是学生和教师,学生可以有多个老师,教师可以有多个学生. watermark/2/text/aHR0cD ...
- Ubuntu下开发环境搭建
安装基础开发包,主要gcc,g++等 sudo apt-get install build-essential 未完待续
- Angularjs web应用
构建兼容浏览器的Angularjs web应用 背景 随着mvvm逐渐成熟,现在使用jQuery构建web应用已经显得过时了,而且使用jQuery需要编写更多的代码去控制dom的取值.赋值.绑定事件等 ...
- FileWriter字符输出流和FileReader字符输出流
//FileWriter public class FileWriterDemo { //字符流:适用于文本文件,以字符为单位进行操作,经常和缓冲流一起使用 /** * 字符流操作步骤: * 1. ...