URL网络编程,最大的特征就是一对一的响应!

1:客户端“写”,服务器端用于“读”

 package coreBookSocket2;

 import java.io.InputStreamReader;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket; /*
* 这边为服务器端的读取
*/ /*
* 1:首先建立一个ServerSocket监听在端口8888上面,服务器端只需要定义和客户端相同的端口号即可
* 2:服务器端尝试接受来自客户端的请求
* 3:和客户端连接好了之后,就可以读取来自客户端的输入信息
* 4:定义一个StringBuilder对象用来保存来自客户端的信息
* 5:关闭Reader,client,server等占用资源的对象
*/
public class clientWtiteserverOpen { public static void main(String[] args) throws Exception{
ServerSocket server=new ServerSocket(8888);
Socket client =server.accept();
Reader reader=new InputStreamReader(client.getInputStream()); //客户端获取自己的输入流
char[] ch=new char[64];
int len;
StringBuilder sb=new StringBuilder();
while( ( len=reader.read(ch) )!=-1)
{
sb.append(ch, 0, len);
}
System.out.println("From Client:"+sb);
reader.close();
client.close();
server.close();
}
}
 package coreBookSocket2;

 import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* 这边为客户端的写出
*/ /*
* 1:首先建立一个客户端的监听端口和IP地址,用相同的端口号与服务器端建立连接
* 2:从客户端向服务器端写出数据
*/
public class clientWriteserverOpen2 {
public static void main(String[] args) throws UnknownHostException, IOException { Socket client=new Socket("127.0.0.1", 8888);
Writer writer=new OutputStreamWriter(client.getOutputStream());
writer.write("Hello server");
writer.flush();
writer.close();
client.close(); } }

2:客户端先写后读,服务器端先读后写

服务器端:

 package ClientAndServerWriteBoth;

 import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket; /*
* 服务器端的编写
* 服务器端是先读后写,那么客户端必定是先写后读
*/ public class server {
public static void main(String[] args) throws IOException { ServerSocket server=new ServerSocket(6666);
Socket client=server.accept(); Reader reader=new InputStreamReader(client.getInputStream());
char[] ch=new char[20];
int len;
StringBuilder sb=new StringBuilder();
String temp;
int index; while(( len=reader.read(ch)) !=-1)
{
temp=new String(ch, 0, len);
if( (index = temp.indexOf("eof")) != -1)//遇到eof时就结束接收, 这个地方没有怎么看明白?为什么到eof就结束?
{
sb.append(temp.substring(0, index));
break;
}
sb.append(temp);
}
System.out.println("---From Client: "+sb); Writer writer=new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Client I'm server! ");
writer.flush();
writer.close();
reader.close();
client.close();
server.close();
}
}

客户端:

 package ClientAndServerWriteBoth;

 import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException; /*
* 客户端的编写,客户端先写后读
* 1:客户端设定特定的端口号与服务器端连接
*/ public class client {
public static void main(String[] args) throws UnknownHostException, IOException { Socket client=new Socket("127.0.0.1", 6666);
Writer writer=new OutputStreamWriter(client.getOutputStream());
writer.write("Hello server, I'm your father,client! 哈哈哈哈哈");
writer.flush();
//写完了开始读 Reader reader=new InputStreamReader(client.getInputStream());
char[] ch=new char[20];
int len;
StringBuffer sb=new StringBuffer();
String temp;
int index; while( (len=reader.read(ch))!=-1)
{
temp=new String(ch, 0, len);
if(( index=temp.indexOf("eof"))!=-1)
{
sb.append(temp.substring(0, index));
break;
}
sb.append(new String(ch, 0, len));
}
System.out.println("---From Server: "+sb);
writer.close();
reader.close();
client.close();
}
}

3:一个服务器端,对应多个客户端的连接

一个服务器端和多个客户端连接最好的方式就是用线程,因为服务器端接受客户端的连接的accept()方法是阻塞式的。

服务器端:

 package oneServerForLotsClient;

 import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 这边主要是服务器的demo的编写
* 1:仍然是准备工作,让服务器端和客户端之间建立相同的端口号,实现连接。
* 2:----因为客户端那边是多个对象连接服务器端,因此需要一个死循环让服务器一直接受连接客户端的连接请求!!!
* 建立一个新的线程去处理客户端的请求
*3:服务器端首先是“读取” 客户端发送过来的信息
*/ public class Server
{
public static void main(String[] args) throws IOException
{ ServerSocket server=new ServerSocket(6868);
while(true)
{
Socket client=server.accept();
new Thread(new Task(client) ).start();
}
}
}
 package oneServerForLotsClient;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
/*
* 这个类主要是用来处理新的线程,实现Runnable接口
* 1:首先定一个构造方法,主要是为了初始化client对象
* 2:同时重写run()方法,这个方法主要开启新的方法用于 “ 读” 数据,和 “写” 数据的处理
*/ public class Task implements Runnable { private Socket client; public Task(Socket client)
{
this.client=client;
} @Override
public void run() {
try {
handlerSocket();
} catch (IOException e) {
e.printStackTrace();
}
} private void handlerSocket() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
StringBuilder sb = new StringBuilder();
String temp;
int index;
while ((temp=br.readLine()) != null) {
System.out.println(temp);
if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收
sb.append(temp.substring(0, index));
break;
}
sb.append(temp);
}
System.out.println("from client: " + sb);
//读完后写一句
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Client.");
writer.write("eof\n");
writer.flush();
writer.close();
br.close();
client.close(); } }

客户端

 package oneServerForLotsClient;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException; public class Client {
public static void main(String[] args) throws UnknownHostException, IOException { Socket client=new Socket("127.0.0.1", 6868); Writer writer=new OutputStreamWriter(client.getOutputStream());
writer.write("Hello,Server. My name is client! ");
writer.write("eof\n");
writer.flush(); //写完了就开始读 BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
StringBuffer buffer=new StringBuffer();
String temp;
int index;
while ((temp=reader.readLine()) != null) {
if ((index = temp.indexOf("eof")) != -1) {
buffer.append(temp.substring(0, index));
break;
}
buffer.append(temp);
}
System.out.println("from server: " + buffer);
writer.close();
reader.close();
client.close(); } }

Socket编程——客户端,服务器端的读写操作的更多相关文章

  1. socket 实现单一串口共享读写操作

    前提:物理串口连接到PC上,通过串口号被PC唯一识别. 此时,物理串口通过该串口号仅能被单一线程或进程实例并占用,其他线程或进程不能再通过该串口号与物理串口通信.这个暂称为串口独占性. 解决思路:核心 ...

  2. java socket编程 初级 服务器端和客户端 通信

    package server; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerS ...

  3. socket编程中服务器端常用函数 以及简单实现

    1 常用函数 1.1   socket() int socket(int family, int type, int protocol); socket()打开一个网络通讯端口,如果成功的话,返回一个 ...

  4. C#版 Winform界面 Socket编程 Server服务器端

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Python socket编程客户端与服务端通信

    [本文出自天外归云的博客园] 目标:实现客户端与服务端的socket通信,消息传输. 客户端 客户端代码: from socket import socket,AF_INET,SOCK_STREAM ...

  6. python--DenyHttp项目(1)--socket编程:服务器端进阶版socketServer

    在网上看到了SocketServer模块,于是Server端简化: #coding:utf-8 import socketserver class MyTCPHandler(socketserver. ...

  7. socket编程中客户端常用函数

    1 常用函数 1.1   connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...

  8. Linux的SOCKET编程详解

    1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 U ...

  9. [转]Linux的SOCKET编程详解

    From : http://blog.csdn.net/hguisu/article/details/7445768 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在 ...

随机推荐

  1. ASP.NET MVC 路由(三)

    ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...

  2. Mint Linux 安装 DotnetCore 遭遇无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

    evlon@evlon-ThinkPad-T530 ~ $ apt install dotnet-dev-1.0.0-preview2-003121 正在读取软件包列表... 完成 正在分析软件包的依 ...

  3. 基于Spring Mvc实现的Excel文件上传下载

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...

  4. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一.

    在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用.注: 本文属于原创文章, 如若转载,请注明出处, 谢谢.关于设置I ...

  5. VS2012 VS2015 的项目配置模板及其目录

    建立的项目多了的时候 , 就希望能自己配置好一个项目模板,以后建立的项目自动使用这个模板就省事了,不用每次都要改, 每个项目都要改了! 经不懈努力, 终于 发现了 vs2015,vs2012 (我只用 ...

  6. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  7. 实战Hybird app:内存溢出与优化

    pheongap项目:http://www.nduoa.com/apk/detail/646816 主要的问题: heap过大,内存低性能差的机子上引起奔溃,直接退出 关于web app的优化,不仅仅 ...

  8. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  9. Codeforces Round #323 (Div. 2) C.GCD Table

    C. GCD Table The GCD table G of size n × n for an array of positive integers a of length n is define ...

  10. jQuery之on

    在jQuery1.9版本中,已经去掉了live和delegate方法,从而将on方法的地位进一步提升. jQuery如此推崇on方法,必有其牛逼的地方.那么我们就有必要了解这个on,并在代码中利用它, ...