java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录。
- 客户端
import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
public static void main(String[] args)throws IOException {
Socket socket=new Socket();
//超时时间
socket.setSoTimeout(3000);
socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(),2000),3000);
System.out.println("已发起服务器连接");
System.out.println("客户端信息:"+socket.getLocalSocketAddress()+"P:"+socket.getLocalPort());
System.out.println("服务器信息:"+socket.getInetAddress()+"P:"+socket.getPort());
try {
todo(socket);
}catch (Exception e){
System.out.println("异常退出");
}
}
private static void todo(Socket client)throws IOException{
//构建键盘输入流
InputStream in=System.in;
BufferedReader input=new BufferedReader(new InputStreamReader(in));
//得到socket输出流并转化为打印流
OutputStream outputStream = client.getOutputStream();
PrintStream socketPrintStream = new PrintStream(outputStream);
//得到socket输入流并转化为BufferedReader
InputStream inputStream = client.getInputStream();
BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));
Boolean flag = true;
do {
//键盘读取一行
String str = input.readLine();
//发送到服务器
socketPrintStream.println(str);
//从服务器读取一行
String echo = socketBufferedReader.readLine();
if("bye".equalsIgnoreCase(echo)){//equalsIgnoreCase是忽略大小写的比较
flag = false;
}else{
System.out.println(echo);
}
}while(flag);
//资源释放
socketBufferedReader.close();
socketPrintStream.close();
}
}
- 服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws IOException{
ServerSocket server = new ServerSocket(2000);
System.out.println("服务器准备就绪");
System.out.println("服务器信息:"+server.getLocalSocketAddress()+"P:"+server.getLocalPort());
//等待客户端连接
for (;;){
Socket client = server.accept();//拿到客户端
ClientHandle clientHandle = new ClientHandle(client);//客户端加入到一个异步线程
clientHandle.start();//启动线程
}
}
/**
客户端消息处理
*/
private static class ClientHandle extends Thread{
private Socket socket;
private Boolean flag = true;
ClientHandle(Socket socket){
this.socket=socket;
}
@Override
public void run(){
super.run();
System.out.println("客户端连接:"+socket.getInetAddress()+"P:"+socket.getPort());
try {
//得到打印流,用于数据输出;服务器回送数据使用
PrintStream socketOutput = new PrintStream(socket.getOutputStream());
//得到输入流,用于接收数据
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
do{
//客户端拿到一条数据
String str = socketInput.readLine();
if("bye".equalsIgnoreCase(str)){
flag = false;
socketOutput.println("bye");
}else{
System.out.println(str);
socketOutput.println("回送:"+str.length());
}
}while (flag);
}catch (Exception e){
System.out.println("异常断开");
}finally {
try {
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
System.out.println("客户端已退出:"+socket.getInetAddress()+"P:"+socket.getPort());
}
}
}
java网络编程——socket实现简单的CS会话的更多相关文章
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- java网络编程socket解析
转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...
- day05 Java网络编程socket 与多线程
java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...
- Java网络编程——Socket
网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...
- JAVA网络编程Socket常见问题 【长连接专题】
一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- Java网络编程Socket通信
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 UDP (User Datagram Proto ...
- java 网络编程Socket
TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...
- java 网络编程Socket编程
Server.java import java.io.*; import java.net.*; public class Server { public static void main(Strin ...
随机推荐
- 十七、linux系统磁盘管理
1. 磁盘是存放许多重要数据的地方,所有了解磁盘是非常重要的. 2. 我们现在一块高达1000GB(1T)磁盘,就是3个盘前(1个3.5寸盘)组成.磁盘在工作的时候,盘片是高速旋转,磁 ...
- c/c++[001]:start
作为一个学校课程跳过c语言的萌新,这次重新学习c/c++从源头上明白这两种不同的输入输出还是很有必要 scanf()是C语言中的一个输入函数.与printf函数一样,都被声明在头文件stdio.h里, ...
- dubbo同步/异步调用的方式
我们知道,Dubbo 缺省协议采用单一长连接,底层实现是 Netty 的 NIO 异步通讯机制:基于这种机制,Dubbo 实现了以下几种调用方式: 同步调用(默认) 异步调用 参数回调 事件通知 同步 ...
- PAT甲级——1025 PAT Ranking
1025 PAT Ranking Programming Ability Test (PAT) is organized by the College of Computer Science and ...
- Create Collection Type with Class Type Constraints
Create Collection Type with Class Type Constraints: new TypeToken<ArrayList<ClassType>>( ...
- 用Excel做数据分析常用函数(数据清理、关联匹配……)
本文总结在使用Excel进行数据分析时,最常用的功能和函数. Excel的功能和函数非常多,用进废退,除了学习基本的函数和功能,最重要的是遇到问题可以快速的搜索并解决. 首先Excel可以处理的数据量 ...
- 吴裕雄--天生自然 R语言开发学习:使用键盘、带分隔符的文本文件输入数据
R可从键盘.文本文件.Microsoft Excel和Access.流行的统计软件.特殊格 式的文件.多种关系型数据库管理系统.专业数据库.网站和在线服务中导入数据. 使用键盘了.有两种常见的方式:用 ...
- 一次完整的HTTP请求响应过程(很详细)
一. HTTP请求和响应步骤 图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协 ...
- _Random和_RandomString的使用区别
__Random 函数介绍 作用:生成随机数 使用格式:${__Random(5,30,myResult_Random)},其中 第一个参数5,表示希望生成的数字最小的值,必填 第二个参数30,表示希 ...
- idea 集成svn
1.下载svn客户端 官网下载地址:https://tortoisesvn.net/downloads.html 2. 安装svn客户端 在安装svn客户端的时候一定要勾选,否则在idea上集成svn ...