Socket实现单客户端与服务器对话功能
单客户端,顾名思义,就是客户端只有一个用户去访问服务器,然后服务器根据该客户请求返回信息,先看下效果图:
服务端(左)和客户端(右):
注意,我是用了两个eclipse,一个只放服务端文件,一个只放客户端文件,先启动服务端,再启动客户端,客户端连接的ip地址即服务端ip,端口可以自己定义。
客户端LoginClient代码:
package com.android.socket.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
*客户端
*/
public class LoginClient {
//向服务器发送请求
public static void main(String[] args) throws UnknownHostException, IOException {
while(true){
Scanner scan=new Scanner(System.in);
Socket soc=new Socket("192.168.1.108",6666);//IP为服务器的地址
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));//输出流,写入
BufferedReader br=new BufferedReader(new InputStreamReader(soc.getInputStream()));//输入流,读取
String str=scan.next();
bw.write(" "+str);
bw.flush();
soc.shutdownOutput();//通知服务器已经写完,可以读取了
String line=br.readLine();
while(line!=null){
System.out.println(line);
line=br.readLine();
}
br.close();
bw.close();
soc.close();
}
}
}
服务端LoginServer代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 服务器
*/
public class LoginServer {
public static void main(String[] args) throws IOException {
while(true){
Scanner scan=new Scanner(System.in);
// ServerSocket相当于一个Socket母体,当监听到客户端有Socket发来请求的时候,服务器的ServerSocket会创建一个与之通信的Socket
ServerSocket ss=new ServerSocket(6666);// 识别客户端
Socket soc=ss.accept();// 为客户端创建Socket通信点
BufferedReader br=new BufferedReader(new InputStreamReader(soc.getInputStream()));// 客户端传过来的是字节流,通过转换流将其转换为字符流
String line=br.readLine();// 读取客户端传来的字符流
while(line!=null){
System.out.println(line);
line=br.readLine();
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));//输出流,向客户端回复
String str=scan.next();
bw.write(" "+str);
bw.flush();
bw.close();
br.close();
soc.close();
ss.close();
}
}
}
首先,客户端用BufferedWriter以流的形式向服务端发送请求,并以soc.shutdownOutput();结束表示请求信息已经完毕,通知服务端可以读取,然后服务端在监听到来自某客户端的请求时,会通过BufferedReader来读取客户端发来的请求信息,步骤大致是这样的,代码中我已经注释的很清楚了,大家可以自己研究,这个是比较简单的也比较基础的Socket通讯实现。大家也可以在这里下载以上代码:
http://download.csdn.net/detail/baiyuliang2013/7041211
Socket实现单客户端与服务器对话功能的更多相关文章
- C++Socket通信(客户端和服务器)
win32控制台版 获取本机IP: cmd: ipconfig/all 我写的是一个服务器和客户端点对点的信息传递(实现相互的可以适当更改代码): 服务器发送给客户端的是一个结构体数据 t ...
- socket编程:客户端与服务器间的连接以及各函数的用法
在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法.这样:我们在写一些简单的socket编程时就 ...
- 聊天室(C++客户端+Pyhton服务器)2.基本功能添加
根据之前的框架添加新的功能 登录 点击相关按钮 // 登录按钮的响应void CMainDialog::OnBnClickedLogin(){ // 1. 获取用户输入的数据 UpdateData(T ...
- Socket与SocketServer结合多线程实现多客户端与服务器通信
需求说明:实现多客户端用户登录,实现多客户端登录一般都需要使用线程技术: (1)创建服务器端线程类,run()方法中实现对一个请求的响应处理: (2)修改服务器端代码,实现循环监听状态: (3)服务器 ...
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
- Socket TCP客户端和服务器的实现
import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.S ...
- 在客户端先通过JS验证后再将表单提交到服务器
问题:想要在客户端先通过JS验证后再将表单提交到服务器 参考资料: jQuery 事件 - submit() 方法 试验过程: 服务器端使用PHP <html> <head> ...
- Java 使用 Socket 实现客户端和服务器的信息交互
服务器 public class Server{ private ServerSocket serverSocket; private Socket socket; private BufferedR ...
- Java Socket聊天室编程(二)之利用socket实现单聊聊天室
这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...
随机推荐
- 报错pymysql.err.DataError: (1406, "Data too long for column 'gender' at row 1")
在Django默认的admin后台创建超级用户时, 报错pymysql.err.DataError: (1406, "Data too long for column 'gender' at ...
- [Luogu 1919]【模板】A*B Problem升级版(FFT快速傅里叶)
Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...
- [NOI 2014]魔法森林
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- 【HNOI2017】影魔
题目描述 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个灵魂,都有着自 ...
- poj2449 (第k条最短路)
题意:求n个点中,a到b的第k条最短路 思路: 用最短路求出估价函数的h,再在搜索过程中记录g,利用A*求出 最开始想到的便是A*和最短路,但是脑子抽了,居然一个一个去求- -,TL了后才发现可以倒着 ...
- [bzoj4823][Cqoi2017]老C的方块
来自FallDream的博客,未经允许,请勿转载,谢谢. 挺有意思的一道题.... 看完题面比较明确是最小割,考虑怎么建图 想了比较久 突破口应该是题目中那张奇怪的图 观察这个奇怪的图和方块,很容易发 ...
- C语言中#define的用法
今天整理了一些#define的用法,与大家共享! 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i& ...
- static class 静态类(Java)
一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...
- IntelliJ IDEA 14.0.3 实战搭建Spring+SpringMVC+MyBatis组合框架
简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发的框架,对于新手来说也是比较容易学习入门的.虽说容易,但在框架搭建过程中仍然遇到了许多问题,因此用实 ...
- JavaScript正则表达式模式匹配(4)——使用exec返回数组、捕获性分组和非捕获性分组、嵌套分组
使用exec返回数组 var pattern=/^[a-z]+\s[0-9]{4}$/; var str='google 2012'; alert(pattern.exec(str)); //返回一个 ...