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编程.
随机推荐
- bluetooth发展(五岁以下儿童)------蓝牙功能测试(一个)
newton板已出版.下面再组织我调试的一小方面,,蓝牙功能的实现和测试: 转载请注明出处:http://blog.csdn.net/wang_zheng_kai 以下是我写的newton开发板中bl ...
- 客户端Webview重定向
今天在客户端的网页中写了句alert的代码,发现执行了两次,后来发现网页的地址写的是http://192.168.14.72/app 客户端Webview加载网页,对于不完全路径会重定向到完全路径,导 ...
- Python 2.7.3的文件编码问题,print在控制台下面中文乱码问题,以及推荐做法
情况:文件乱码,在cmd上输出print也乱码.解决方案:统一为gbk的简体中文编码方式.步骤如下: 1.每个py文件使用[简体中文(GB2312)- 代码页 936]格式保存,行尾为[Windows ...
- MySQL之 ALTER vs CHANGE vs MODIFY COLUMN
1.ALTER COLUMN 用于设置或者移除某一列的默认(缺省)值, 1.1用法 ALTER TABLE MyTable ALTER COLUMN foo SET DEFAULT 'bar'; AL ...
- Oracle中注意用户的访问权限
新增表.序列.存储过程等,要注意用户(例如System)的权限.如果在增删改查过程中出现数据库读写权限的报错,则在建表(或者序列.存储过程等)时,在脚本前面加 GRANT CREATE TABLE T ...
- WebIM(1)
WebIM系列文章 之前笔者发布的云翔在线软件平台中已经包含了一个功能相对比较齐全的WebIM,这个系列的文章就是介绍如何开发出功能类似的WebIM,在文章开始前,先介绍一下相关的技术: 1.Come ...
- HTML 速成
html零基础者入. 记得学计算机网络的时候好像有学过一些HTML,但没运用起来都忘光了.近来想学学如何写网页.就从html(HyperText Markup Language超文本标记语言)入手了. ...
- Oracle wrap 和 unwrap( 加密与解密) 说明
一. Wrap 说明 官网的说明如下: A PL/SQL Source Text Wrapping http://download.oracle.com/docs/cd/E11882_01/appde ...
- Oracle自主事务处理
--当一个子程序调用另外一个子程序时,事务提交或回滚都将影响两个子程序 --为防止一个子程序的事务影响其他子程序,可以将这个子程序标记为自主事务处理 --这样自主事务成为一个独立的事务处理,不影响其他 ...
- Windows Forms框架编程
<Windows Forms框架编程>节选 第九章 设计模式与原则 软件设计模式(Design pattern)是一套被反复使用的代码设计经验总结.使用设计模式是为了可重用代码.让代码 ...