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. 《App研发录》面世

    古者富贵而名灭,不可胜记,唯倜傥非常之人称焉.故西伯拘而演<周易>,屈原放逐,乃赋<离骚>.文人雅士一次次的谱写着千古绝唱,而我亦不能免俗,也要附庸风雅,写一部前不见古人.后不 ...

  2. Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c

    错误: Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, V ...

  3. Session中放错误提示JSP上获取

    servlet中: message= "图片上传失败!"; request.setAttribute("message",message);   JSP中运用一 ...

  4. Atitit 深入理解耦合Coupling的原理与attilax总结

    Atitit 深入理解耦合Coupling的原理与attilax总结     耦合是指两个或两个以上的电路元件或电网络等的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现 ...

  5. 网站初步收工---www.dkill.net

    今天10.30左右备案核审成功了,然后一天都在忙部署和一些其他的东西,中途也写了很多文档,遇到很多问题,直接琢磨了N久,暂时发了这么多教程,明天揭露阿里云的各种坑(先用winServer服务器,有时间 ...

  6. OPEN CASCADE Gauss Least Square

    OPEN CASCADE Gauss Least Square eryar@163.com Abstract. The least square can be used to solve a set ...

  7. Notes:indexedDB使用

    indexedDB是浏览器端保存结构化数据的一种数据库,类似于mysql,oracle等数据库,但indexedDB使用对象存储数据,而不是用表. indexedDB是全局的宿主对象,使用window ...

  8. node-mysql 在4.2.0的时候遇到的错误

    实际上这个问题折腾了几天.前一阵因为升级到了最新的4.2.0,发现mysql的应用就出错了,错误消息也比较奇怪 Handshake Inactivity Timeout - PROTOCOL_SEQU ...

  9. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  10. grape动态PHP结构(三)——API接口

    一.app视图与控制器