用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. centos7 ssh免口令认证登录

    摘要:centos7, xshell, 公钥,  ssh ssh登录方式有口令认证登录和密钥认证登录 接下来本次介绍是ssh密钥登录方式 (1)产生公钥 (2)将公钥放置到centos7的(/root ...

  2. POJ 3257 DP

    题意: 思路: 用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存) 然后DP就好了 f[i][j]表示到了i 成本为j的有趣指数最大是多少 f[vec[i][k].e ...

  3. C++包含头文件时尖括号和双引号区别

    原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作# ...

  4. javaScript 预编译过程浅尝

    javaScript 预编译过程 1.创建AO对象(Activation Object) AO{ a: } 2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined AO{ a:und ...

  5. python学习二,字符串常用操作

    字符串可以说是在日常开发中应用最广泛的了,现在来总结下有关python中有关字符串一些常用操作 首先我们声明一个字符串变量 str = "hello world" 下面我们来依次介 ...

  6. XTUOJ 1206 Dormitory's Elevator

    Dormitory's Elevator Time Limit : 1000 MS   Memory Limit : 65536 KB Problem Description The new dorm ...

  7. jmeter名词解释之聚合报告

    新浪围脖>@o蜗牛快跑o    温馨提示: 1. tps(吞吐量)表征系统性能,系统的好坏能够用这个评估 2. 90%Line是满足需求响应时间的重要指标,假设用户需求说是响应时间不小于5s,那 ...

  8. android反编译odex文件

    关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android- ...

  9. android 动态设置TextView值,例:金额添加

    一说到动态递增设置TextView值,非常多人应该立即就想到起个线程,让后在线程中睡眠指定时间,使用handler发送消息更新TextView值! 这样是实现了动态递增设置TextView值可是效率不 ...

  10. 前台ajax验证技术采用正则表达式

    var flag1,flag2,flag3,flag4,flag5,flag6=false; function val(obj) { var regBox = { /* regEmail : /^([ ...