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. 跟我一起数据挖掘(21)——redis

    什么是Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  2. vmware 安装xp 流水账

    1. 分区 PQ分区.1个区,C盘,NTFS. 2. 安装XP 进入ghost,不要选择一键. 然后fromImage, d:\xxx\GHO

  3. dubbo 配置文件详解

    一.dubbo常用配置 <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心. eg.<dub ...

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

    今天 不知自己装的centos 出现了什么问题, 一直卡在 启动界面, 找了半天没找见原因(最后时刻还是发现原因, 只因自己手欠一怒之下将centos删除了, 而且选择的是在本地磁盘也删除. ..让我 ...

  5. 手写原生ajax

    关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XM ...

  6. iOS中通讯录的开发

    通讯录开发主要是获取用户手机中的联系人,进而可以在应用中添加好友 一 .如何访问通讯录 (1)在iOS9之前,有两个框架可以访问用户的通讯录 AddressBookUI.framework: 提供了联 ...

  7. VXLAN 概念(Part II)- 每天5分钟玩转 OpenStack(109)

    上一节我们介绍了 VXLAN 的封装格式以及 VTEP.今天我们将通过例子讨论 VXLAN 封装和转发包的过程,以及 Linux 对 VXLAN 的原生支持. VXLAN 包转发流程 VXLAN 在 ...

  8. IOS开发之新浪围脖

    IOS开发和Web开发一样,网络请求方式包括Get和Post方式.Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据.下面还会提到如何在我们的项 ...

  9. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  10. swift2.0 如何隐藏和设置状态栏

    1.在ViewController中操作当前ViewController的状态栏/** 隐藏状态栏 */ override func prefersStatusBarHidden() -> Bo ...