单客户端,顾名思义,就是客户端只有一个用户去访问服务器,然后服务器根据该客户请求返回信息,先看下效果图:

服务端(左)和客户端(右):

注意,我是用了两个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实现单客户端与服务器对话功能的更多相关文章

  1. C++Socket通信(客户端和服务器)

    win32控制台版 获取本机IP: cmd:       ipconfig/all 我写的是一个服务器和客户端点对点的信息传递(实现相互的可以适当更改代码): 服务器发送给客户端的是一个结构体数据 t ...

  2. socket编程:客户端与服务器间的连接以及各函数的用法

    在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法.这样:我们在写一些简单的socket编程时就 ...

  3. 聊天室(C++客户端+Pyhton服务器)2.基本功能添加

    根据之前的框架添加新的功能 登录 点击相关按钮 // 登录按钮的响应void CMainDialog::OnBnClickedLogin(){ // 1. 获取用户输入的数据 UpdateData(T ...

  4. Socket与SocketServer结合多线程实现多客户端与服务器通信

    需求说明:实现多客户端用户登录,实现多客户端登录一般都需要使用线程技术: (1)创建服务器端线程类,run()方法中实现对一个请求的响应处理: (2)修改服务器端代码,实现循环监听状态: (3)服务器 ...

  5. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  6. Socket TCP客户端和服务器的实现

    import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.S ...

  7. 在客户端先通过JS验证后再将表单提交到服务器

    问题:想要在客户端先通过JS验证后再将表单提交到服务器 参考资料: jQuery 事件 - submit() 方法 试验过程: 服务器端使用PHP <html> <head> ...

  8. Java 使用 Socket 实现客户端和服务器的信息交互

    服务器 public class Server{ private ServerSocket serverSocket; private Socket socket; private BufferedR ...

  9. Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...

随机推荐

  1. [ZJOI2010]基站选址

    题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距离第i个村庄不超过Si的范 ...

  2. UVALive4727:jump

    约瑟夫环变式 设f[i][j]表示处理i个人,按照处理顺序,倒数第j个人是谁 则有f[i][j]=(f[i-1][j]+k)%i #include<cstdio> #include< ...

  3. 【USACO】奶牛抗议 树状数组+dp

    题目描述 约翰家的 N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几 ...

  4. HDU 4526 拼车记

    话说威威猫有一次去参加比赛,虽然学校离比赛地点不太远,但威威猫还是想坐出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人坐车去,还是一堆人一起,总共需要支付的钱是一样的(每辆出租 ...

  5. hdu 5479(括号问题)

    题意:类似"()","(())","()()" 是匹配的, 而 "((", ")(", " ...

  6. [APIO2011]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------ A.[Apio2011]方格染色 ...

  7. sklearn.model_selection 的 train_test_split作用

    train_test_split函数用于将数据划分为训练数据和测试数据. train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train_data和test_data ...

  8. widows下的进程与服务

    进程: 当程序卡死的时候,我们可以直接通过任务管理器来关闭进程. 服务: 在这个界面,我们可以选择启动或者关闭相关服务,还可以选择服务是否自动启动. 以关闭MySQL自启动服务为例:https://j ...

  9. H3C交换机如何配置管理VLAN

    1.输入"system-view"(简写"sys"),进入系统配置模式[H3C],2.下面就可以开始取消默认管理vlan了,输入"undo inter ...

  10. logback 三

    一.LoggerFactory.gerLogger()使用: private Logger vitalLogger= LoggerFactory.getLogger("vitalReques ...