TCP(Socket基础编程)
1、TCP特点:
面向连接、可靠安全、传输量大、速度较慢
2、socket编程主要依靠两个类:socket 、serversocket
example1:客户端可以不停输入字符串,服务端返回字符串的大写
客户端代码:
public static void main(String[] args) throws Exception{
//建立socket连接 连接一旦建立成功 就可以获得 输入流 和 写出流
Socket s = new Socket(InetAddress.getLocalHost(),10001);
//客户端从键盘输入字符
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//从服务端获取的输入流,可以获取从服务端返回的信息
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//写出流 方式一 把信息发送到服务端
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
//写出流 方式二
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line=br.readLine())!=null){
//写到服务端 方式一
pw.println(line);
//写到服务端 方式二
/*
bw.write(line);
bw.newLine();
bw.flush();
*/
//读取服务端返回信息(这是一个阻塞方法)
String result = in.readLine();
System.out.println(result);
}
s.close();
br.close();
}
服务端代码:
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new ServerThread(s)).start();
}
}
class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+"is connecting");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
//如果接收到结束标志 则结束
if("over".equals(line)){
break;
}
System.out.println(line);
pw.println(line.toUpperCase());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Example2:上传文件——客户端将文件内容写到服务端,服务端 将内容保存到其他位置,实现从服务端上传文件的功能
客户端代码:
public static void main(String[] args) throws Exception {
Socket s = new Socket(InetAddress.getLocalHost(),10001);
BufferedReader br = new BufferedReader(new FileReader(new File("D:/baichuanyu/HelloWorld/src/com/action/Hello.java")));
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line=br.readLine())!=null){
pw.println(line);
}
//文件内容写到服务器完成后,服务端没有接受到结束标志,会继续readline()下去
//通过shutdownOutput()方法 可以向服务器写-1结束标志 从而结束服务端的readline()方法
s.shutdownOutput();
String result = in.readLine();
System.out.println(result);
s.close();
br.close();
}
服务端代码:
class UploadThread implements Runnable{
private Socket socket;
public UploadThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+" is connecting....");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(new FileWriter(new File("E:\\Hello.txt")),true);
PrintWriter os = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
pw.println(line);
}
os.println("over");
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new UploadThread(s)).start();
}
}
TCP(Socket基础编程)的更多相关文章
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 再次回首 TCP Socket服务器编程
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程--转
------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎 ...
- C#网络程序设计(2)Socket基础编程
本节介绍如何使用基础Socket实现TCP通信. (1)Socket详细介绍: Socket的英文原义是"孔"或"插座".通常称作"套 ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- Socket基础编程
地址结构sockaddr_in 其中包含:IP地址,端口号,协议族推荐使用sockaddr_in,而不建议使用sockaddrsockaddr_in与sockaddr是等价的,但sockaddr_in ...
- socket基础编程-1
server端和client端 1.server端: import socket server=socket.socket() server.bind(('localhost',8080)) serv ...
- socket基础编程-2
client端: import socket while True: client=socket.socket(socket.ANET,socket.SOCK_STREAM) client.conne ...
- C++ SOCKET 基础编程
{ http://c.biancheng.net/socket/ }
随机推荐
- [TJOI2016][HEOI2016]排序
题目大意: 给定一个$1\sim n(n\leq10^5)$的全排列,有$m(m\leq10^5)$次操作,每次把区间$[l,r]$按照升序或降序排序.最后询问所有操作完成后,位置为$q$的数是多少. ...
- HTTP 代理(转)
什么是代理服务器 Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色. HTTP的代理服务器即是Web服务器又是Web客户端. Fiddle ...
- linux查看端口状态相关命令
netstat netstat 命令应用是比较频繁的,比如查看端口占用啦,查看端口进程啦,这些时候都是有必要的. netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示 ...
- EasyMvc入门教程-高级控件说明(18)弹出框控件
前面两节介绍了信息框与对话框,实际开发中如果我们遇到更复杂的要求,比如要求在弹出框里显示另外的网址,如下所示: 实现代码如下: @Html.Q().Popup().Text("我可以嵌套网页 ...
- Xshell 初次应用
以前就想安装Xshell,今天终于弄好了,可以在windows下对Linux服务端进行管理. 关于SSH和Xshell的介绍见参考,Linux上安装的是ssh服务端,所以咱们如果希望通过远程访问的方式 ...
- 【Java编程】JDBC注入攻击-Statement 与 PreparedStatement
在上一篇[Java编程]建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement我们介绍了怎样使用JDBC驱动建立一个简单的 ...
- 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾 ...
- 即将到来的Android N,将具备这些新特性
原文转自:http://www.leiphone.com/news/201602/pSRQAuAjMFJITqHe.html 原创 訾竣喆 即将到来的Android N,将具备这些新特 ...
- linux设备驱动程序之并发和竞态(二)
事实上这blog都是阅读ldd3时的一些总结,巩固自己的学习.也方便后期的使用.大家也能够直接阅读ldd3原文. 锁陷阱 所谓的锁陷阱就是防止死锁. 不明白的规则: ...
- iframe中,重新加载页面
比如在iframe中的页面,设置一个onclick事件的触发函数flush function flush(){ window.location.reload(); }