用socket(套接字)实现client与服务端的通信。

这里举两个样例:

第一种是每次client发送一个数据,服务端就做一个应答。

(也就是要轮流发)

另外一种是client能够连续的向服务端发数据,服务端也能够连续向client发数据。(多线程)

为了方便起见,client服务端都放在一个主机上。分别开两个进程[哈哈,进程间通信lol~]

PS: 一个聊天程序雏形

代码也放在GitHub上了:https://github.com/MummyDing/socketChatDemo

Demo 1:

简单的Socket通信。一人一句话就结束了(要一直说加个循环就好)

client

/**
Client
Author :MummyDing
*/
import java.lang.Runnable;
import java.io.*;
import java.net.*;
class clientConnect{
Socket client = null;
BufferedReader inputData = null;
PrintWriter outputData = null;
String receiveData ,sendData ; clientConnect(){
try {
client = new Socket("127.0.0.1", 5234);
dealData();
}
catch (Exception e) {
System.out.println("I cann't Connect!");
System.exit(1);
}
}
void dealData(){
try{
outputData = new PrintWriter(client.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); sendMsg();
receiveMsg();
}catch (Exception e) {
System.out.println("Error ~");
} }
void sendMsg(){
outputData.println("Hello Server");
}
void receiveMsg(){
try{
receiveData = inputData.readLine();
System.out.println("Server said "+receiveData);
}catch (Exception e) {
System.out.println("Error");
} }
}
public class Client {
public static void main(String[] args) {
clientConnect connecte = new clientConnect();
}
}

服务端:

/**
Server
Author :MummyDing
*/
import java.lang.Runnable;
import java.net.*;
import java.io.*;
class serverConnect {
ServerSocket serverSocket = null;
Socket clientSocket = null;
String receiveData,sendData;
serverConnect(){
try {
serverSocket = new ServerSocket(5234);
clientSocket = serverSocket.accept();
dealData();
}
catch (Exception e) {
System.out.println("Server Bulid Error");
System.exit(1);
}
}
void dealData(){
try{
PrintWriter outputData = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
receiveData = inputData.readLine();
System.out.println("Client say:"+ receiveData);
outputData.println("Ha ha , I got your info: "+receiveData);
}catch (Exception e) {
System.out.println("Error!");
}
}
}
public class Server{
public static void main(String[] args) {
serverConnect connecte = new serverConnect();
}
}

Demo 2:

在Demo 1的基础上进行了该进,实现了一人能够连续说几句话。(多线程)

client:

/**
Client
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable;
import java.io.*;
import java.net.*;
class clientConnect{
Socket client = null;
BufferedReader inputData = null;
PrintWriter outputData = null;
String receiveData ,sendData ;
clientConnect(){
try {
client = new Socket("127.0.0.1", 5234);
dealData();
outputData.println("OK");
}
catch (Exception e) {
System.out.println("I cann't Connecte!");
System.exit(0);
}
}
void dealData(){
try{
outputData = new PrintWriter(client.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(client.getInputStream()));
}catch (Exception e) {
System.out.println("Error ~");
System.exit(0);
}
}
String sendMsg(){
Scanner sc = new Scanner(System.in);
sendData = sc.nextLine();
outputData.println(sendData);
outputData.flush();
System.out.println("I say:"+ sendData);
return sendData;
}
boolean receiveMsg(){
try{
receiveData = inputData.readLine();
if(receiveData.equals("shutdown")) return false;
System.out.println("Server said "+receiveData);
}catch (Exception e) {
System.out.println("Error");
System.exit(0);
}
return true;
}
}
public class Client {
public static void main(String[] args) {
clientConnect connect = new clientConnect();
Thread t = new Thread(new Runnable(){
public void run(){
while(true){
connect.dealData();
if(connect.receiveMsg() == false){
System.out.println("SHUTDOWN!!!");
System.exit(0);
}
}
}
});
t.start();
while(connect.sendMsg().equals("shutdown") == false){
}
System.exit(0);
}
}

服务端:

/**
Server
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable;
import java.net.*;
import java.io.*;
class serverConnect {
ServerSocket serverSocket = null;
Socket clientSocket = null;
String receiveData,sendData;
PrintWriter outputData ;
BufferedReader inputData;
serverConnect(){
try {
serverSocket = new ServerSocket(5234);
clientSocket = serverSocket.accept();
}
catch (Exception e) {
System.out.println("Server Bulid Error");
System.exit(1);
}
}
void dealData(){
try{
outputData = new PrintWriter(clientSocket.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}catch (Exception e) {
System.out.println("Error!");
System.exit(0);
}
}
boolean receiveMsg(){
try{
receiveData = inputData.readLine();
if(receiveData.equals("shutdown")) return false ;
System.out.println("Client say:"+ receiveData);
}catch (Exception e) {
System.out.println("receive Error~");
System.exit(0);
}
return true;
}
String sendMsg(){
Scanner sc = new Scanner(System.in);
sendData = sc.nextLine();
outputData.println(sendData);
outputData.flush();
System.out.println("I say:"+ sendData);
return sendData;
}
}
public class Server{
public static void main(String[] args) {
serverConnect connect = new serverConnect();
Thread t = new Thread(new Runnable(){
public void run(){
while(true){
connect.dealData();
if(connect.receiveMsg() == false){
System.out.println("SHUTDOWN!!!");
System.exit(0);
}
}
}
});
t.start();
while(connect.sendMsg().equals("shutdown") == false){
}
System.exit(0);
}
}

--------------------------------------------------

期间犯了一个非常二的错误,client和服务端里面用了"同名类",这就导致后编译的把前面的"同名类"覆盖掉了。



完整代码: https://github.com/MummyDing/socketChatDemo

【转载请注明出处】

作者:MummyDing

出处:http://blog.csdn.net/mummyding/article/details/46445675

【Java】Java Socket 通信演示样例的更多相关文章

  1. java 状态模式 解说演示样例代码

    package org.rui.pattern; import junit.framework.*; /** * 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的 ...

  2. Java 反射经常用法演示样例

    <pre name="code" class="java">import java.lang.reflect.Constructor; import ...

  3. socket编程演示样例(多线程)

    client代码例如以下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChat ...

  4. python实现zabbix_sender的socket通信代码样例

    sk = socket.socket() sk.connect(self.ip_port) sk.settimeout(5) sk.sendall(b'ZBXD\x01') sk.sendall(b' ...

  5. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...

  6. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

  7. java并行调度框架封装及演示样例

    參考资料:  阿里巴巴开源项目 CobarClient  源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...

  8. Java连接redis的使用演示样例

    Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...

  9. java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

    java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...

随机推荐

  1. 2008R2域控环境中 应用组策略 实现禁用USB设备使用

    本文介绍如何在Windows Server 2008 AD中禁用客户端USB端口.本文使用的系统:Windows Server 2008 R2 企业版.域功能级别:Windows Server 200 ...

  2. Flex之文件目录浏览器实例

    Flex之文件目录浏览器实例 Flex的AIR项目 <?xml version="1.0" encoding="utf-8"?> <mx:Wi ...

  3. 实现人脸识别性别之路---matplotlib之注释

    一.准备数据 利用np.linspace()函数得到一定范围内的数据集 利用2*x+1的公式求出y 二.创建窗口 三.根据具有规律的数据画图 四.调整坐标轴 1.将原本的坐标轴的上轴和右轴去掉,使用基 ...

  4. Linux Cgroups

    目录 Linux Cgroups Cgroups中的三个组件 三个组件的关系 Kernel接口 Docker是如何使用Cgroups的 Go语言实现Cgroups限制容器资源 Linux Cgroup ...

  5. 【Python】【Head First Python】【chapter1】1 - 导入模块

    导入模块 导入模块有三种方法,以导入sys模块为例: 第一是import module 形式导入 import sys location = sys.stdout 第二是from module imp ...

  6. 今日SGU 5.13

    SGU 146 题意:就是给你一个长度为l的圈,然后你跑步,每一段给你时间t和速度v,问你最后离起点多远 收获:就是把浮点数转为整数,然后但是会出现精度误差,比如l最多四位小数,那你就加0.00001 ...

  7. HRBUST 1376 能量项链

    能量项链 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ID: 13 ...

  8. SQL脚本存在TABLE ACCESS FULL行为

    对于SQL的执行计划,一般尽量避免TABLE ACCESS FULL的出现,那怎样去定位,系统里面哪些SQL脚本存在TABLE ACCESS FULL行为,对于9i及以后版本,使用以下语句即可 sel ...

  9. python创建多层目录的方式

    将 os.mkdir 改成 os.makedirs(opDir) 哈.

  10. Xposed框架之函数Hook学习

    作者:Fly2015 Xposed是Android下Java层的开源Hook框架类似的有cydiasubstrate框架而且据说cydiasubstrate框架能实现Android的Java层和Nat ...