【Java】Java Socket 通信演示样例
用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
【Java】Java Socket 通信演示样例的更多相关文章
- java 状态模式 解说演示样例代码
package org.rui.pattern; import junit.framework.*; /** * 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的 ...
- Java 反射经常用法演示样例
<pre name="code" class="java">import java.lang.reflect.Constructor; import ...
- socket编程演示样例(多线程)
client代码例如以下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChat ...
- python实现zabbix_sender的socket通信代码样例
sk = socket.socket() sk.connect(self.ip_port) sk.settimeout(5) sk.sendall(b'ZBXD\x01') sk.sendall(b' ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
- java并行调度框架封装及演示样例
參考资料: 阿里巴巴开源项目 CobarClient 源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
随机推荐
- thinkphp里面使用原生php
thinkphp里面使用原生php Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式: 使用php标签 例如: {php}echo 'Hello ...
- asp.net 关于cookie的操作
一.无子键或单级cookie 读写(1).写入: 第一种 HttpCookie cookie=new HttpCookie("User"); cookie.Value=" ...
- 手把手教你安装Navicat——靠谱的Navicat安装教程
Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便,简洁.下面讲讲其安装的过程. 1.进入navicat官网,选择Navicat for MySQL,然后点击进行下载即 ...
- modelForm所遇问题
1. 通过modelForm创建表单所遇问题 id 在modelForm中无法创建使用 因为它是django的设置,自增的字段,而不是模型中所设置的字段. 当关联外键时,创建多选的下拉框时,需要注意此 ...
- 紫书 例题 9-14 UVa 1218 (树形dp)
这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...
- 利用js 获取ip和地址
1.引用第三方js<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> 2. I ...
- 多线程模式之Master-Worker
一. 介绍 需要使用Master-Worker的场景:主线程开了多个子进程(Worker进程)去执行任务时,主线程希望能收集到每个子进程的执行结果. 所以,Master-Worker模式基本上就是: ...
- [Python] Understand Mutable vs. Immutable objects in Python
In this lesson, you will learn what mutable and immutable objects are, and the difference between th ...
- Viewpager切换时pager页面的生命周期变化
总结1: 当我们把ViewPager和Fragment合用的时候,切换页面时生命周期会发生对应的变化.变化规律:载入当前页面.前一个页面和后一个页面.我们来看一个实际測试效果图 打开应用会载入第一个页 ...
- MATLAB 软件学习
what 列出当前目录或指定目录下的M\MAT 和 MAX 文件 … 在语句行尾端表示该行未完 ! 调用操作系统的命令 isvarname 判断变量名是否有效 声明全局变量 变量名前加 ...