模拟客户端登陆(基于TCP的Socket编程)

1、客户端

 package com.ljb.app.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 客户端(模拟客户登陆并接收服务端响应信息)
 * @author LJB
 * @version 2015年3月11日
 */
public class LoginClient {
 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   // 建立客户端Socket连接,指定服务器的位置以及端口
   Socket socket = new Socket("localhost",8800);
   
   // 得到Socket的读写流
   OutputStream os = socket.getOutputStream();
   PrintWriter pw = new PrintWriter(os);
   
   // 获取输入流
   InputStream is = socket.getInputStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   
   // 进行写操作
   String info = "用户名:Tom,密码:123456";
   pw.write(info);
   pw.flush();
   socket.shutdownOutput();
   
   // 接收服务端响应
   String reply = null;
   while (!((reply = br.readLine()) == null)) {
    System.out.println("我是客户端,服务端响应是:" + reply);
   }
   
   // 关闭流
   br.close();
   is.close();
   pw.close();
   os.close();
   socket.close();
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

2、服务端

 package com.ljb.app.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服务端(接收客户端登陆信息并给出响应)
 * @author LJB
 * @version 2015年3月11日
 */
public class LoginServer {
 /**
  * @param args
  */
 public static void main(String[] args) { 
  try {
   // 建立一个服务器绑定指定端口Socket(ServerSocket)并开始监听
   ServerSocket serverSocket = new ServerSocket(8800);
   
   // 使用accept()方法阻塞等待监听,获得新的连接
   Socket socket = serverSocket.accept();
   
   // 获得输入流
   InputStream is = socket.getInputStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   
   // 获得输出流
   OutputStream os = socket.getOutputStream();
   PrintWriter pw = new PrintWriter(os);
   
   // 读取用户输入信息
   String info = null;
   while (!((info = br.readLine()) == null)) {
    System.out.println("我是服务器,用户信息为:" + info);
   }
   
   // 响应信息
   String reply = "welcome";
   pw.write(reply);
   pw.flush();
   
   // 关闭流
   pw.close();
   os.close();
   br.close();
   is.close();
   socket.close();
   serverSocket.close();
  } catch (IOException e) {
   e.printStackTrace();
  } 
 }
}

运行结果:

客户端:

我是客户端,服务端响应是:welcome

服务端:

我是服务器,用户信息为:用户名:Tom,密码:123456

时间: 2024-12-29 04:35:59

模拟客户端登陆(基于TCP的Socket编程)的相关文章

网络 基于TCP协议socket编程

一.socket编程         1.socket编程        socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socket.在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socket pair就唯一标识一个连接. socket本义有"插座"的意思,因此用来描述网络连接的一对一关系.    

基于TCP的socket 编程

一.对socket的理解 1.socket本身有"插座"的意思,因此用来描述网络连接的一对一关系. 2.在TCP/IP协议中,"IP地址+TCP/UDP端口号"唯一标识网络通信中的一个进程,"IP地址+端口号"就称为socket. 3.在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socketpair 就唯一标志一个连接. 二.网络数据流 网络数据流有大端和小端之分.发送主机通常将发送缓冲区中的数据按

基于C#的socket编程的TCP异步实现

一.摘要 本篇博文阐述基于TCP通信协议的异步实现. 二.实验平台 Visual Studio 2010 三.异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法接入连接请求,而在客户端则使用Connect方法来连接服务器.相对地,在异步模式下,服务器可以使用BeginAccept方法和EndAccept方法来完成连接到客户端的任务,在客户端则通过BeginConnect方法和EndConnect方法来实现与服务器的连接. BeginAccept在异步方式下

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

基于UDP的socket编程

一.相关函数说明 UDP是无连接的,即发送数据之前不需要建立连接. 除了基于TCP中的socket编程所需的函数之外,基于UDP的socket编程中还需要用到两个函数. 1.sendto函数:用于客户端中指定一目的地发送数据. (1)函数原型 (2)参数说明 sockfd:套接字 buf:待发送数据的缓冲区 len:缓冲区长度 flags:调用方式标志位,一般为0:若改变flags,则sendto发送数据的形式会变成阻塞 dest_addr:指向目的套接字的地址 addrlen:指向目的套接字的

基于java的socket编程

#开头的废话#学习java已经半个月了,原本在抠教材里面的字眼时,觉得教材好厚,要看完不知道要到猴年马月去了.突然在网上看到一个教程,里面老师说学编程语言书不用太细看,看个大概,知道里面讲些什么就好,不用全记得,然后你一个劲地编,使劲地编,编的时候不懂再回来看就好了,这是最快的方法.心里一琢磨,还真是这样,根据以前学C语言的情况不就这样吗.所以便加速看,把一些书里介绍的方法,类飞速地浏览过了,刷到网络这一章,觉得socket编程应该是得试一下手,不要只看不做假把式. 此文为原创,转摘请注明转摘自

基于win32的socket编程及程序实现

初步研究了win32平台的Windows Sockets,它是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用.包括流式套接字(提供面向连接.可靠的数据传输服务,数据无差错.无重复的发送,且按发送顺序接收.)和数据报套接字(提供无连接服务.数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱.).原始套接字. CS模型:在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户

(1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将数据的传递从逻辑上划分为以下七层: 应用层.表示层.会话层.传输层.网络层.数据链路层.物理层. 在发送数据之前要按照上述七层协议从上到下一层一层进行加包处理,再发送出去; 在接收数据之后要按照上述七层协议从下到上一层一层进行拆包处理,再解析出来: 1.2 常用的协议(熟悉) http协议 - 超文

基于java的socket编程及API解析

一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据. 我们所说的socket 编程,是站在传输层的基础上,所以可以使用 TCP/UDP 协议,但是不能进行访问网页,因为访问网页所需要的 http 协议位于应用层.作为一个应用程序是能实现该层以下的内容,而不能实现在该层之上的内容. 2.socket通讯过程: (