线程实现ServerSocket和Socket实现数据交互

定义一个MyServer类

import java.io.IOException;
import java.net.ServerSocket;

public class MyServer {
public static void main(String[] args) {
try {
System.out.println("服务器启动");
ServerSocket ss = new ServerSocket(80);
while (true) {
new MyThread(ss.accept()).start();//监听到一次 开启一个线程,省去很多资源,这里很多人都会用死循环去实现循环监听,很浪费资源。

}

} catch (IOException e) {
e.printStackTrace();
}
}
}

-----------------------------------

客户端访问服务器端的类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MyClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.println("客户端启动");
Socket socket = new Socket("127.0.0.1", 80);//访问本机,端口80
PrintWriter out = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));//创建一个输出流,手动输入要转换的字符串
out.println(sc.next());
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));//创建一个输入流,接受服务器返回的数据
String sline = in.readLine();
System.out.println("从服务器端返回的数据是:" + sline);
} catch (IOException e) {
e.printStackTrace();
}

}
}

---------------------------------------------

线程类具体实现数据交互

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class MyThread extends Thread {

Socket socket;

public MyThread(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String sline = in.readLine();
System.out.println("从客户端接受的数据是:" + sline);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
pw.println((sline==null)?"":sline.toUpperCase());
pw.flush();
System.out.println("服务器结束");

} catch (IOException e) {
e.printStackTrace();
}
}

}

原文地址:https://www.cnblogs.com/heng1108/p/8613014.html

时间: 2024-10-12 01:58:44

线程实现ServerSocket和Socket实现数据交互的相关文章

ServerSocket与Socket类

ServerSocket与Socket类 TCP套接字协议: TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢.使用TCP进行连接的时候会有三次握手,之后才建立起服务器与客户端的连接,因为TCP的链接习惯是询问对方机器是否存在,不存在就不会建立连接,存在才会建立连接. 示意图: ServerSocket类: 在Java中想要使用TCP协议做编写服务端的话,需要使用到ServerSocke类,这个类是TCP协议的. TCP协议的操作类都在java.net包下放

C# 移动端与PC端的数据交互

小记:针对目前功能越来越强大的智能手机来说,在PC端支持对手机中的用户数据作同步.备份以及恢复等保护措施的应用已经急需完善.不仅要对数据作保护,而且用户更希望自己的手机跟PC能够一体化,以及和远程服务器的一体化.用户希望在手机端的操作能够转移到PC端,对于PC端大屏幕的电脑来说,完成同样的操作可以大量的节省用户的时间.对于功能强大的手机来说,有近1/2的应用可以在PC端同步.所以对PC端应用的规划要以系统的角度来对待.同时要保证手机端和PC端的主流交互模式应保持一致.个人观点:数据的一体化和管理

Unity3D 使用Socket处理数据并将数据 在UGUI、NGUI上显示出来

Unity3d 不支持C#的线程直接调用Unity3D 主线程才能实现的功能.例如:给UGUI text 赋值.改变Color值等.怎样解决这个问题呢?使用一个Loom脚本. 按照惯例贴上代码. 首先Loom脚本 using UnityEngine;using System.Collections;using System.Collections.Generic;using System;using System.Threading;using System.Linq; public class

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处! 一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原生APP中的使用越来越广泛,也就是我们常说的混合开发(Hybrid APP).最新很火的微信小程序相信大家都是知道的,实际上微信小程序加载的界面就是一个HTML5的界面,HTML5界面在一些电商类的APP中主要承担展示数据的作用,但是他的作用并不仅限于此,最起码js调用原生方法和原生调用js的方法是

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

TCP移动端跟服务器数据交互

同一台笔记本下的客户端和服务端 TCPClient 客户端: //  RootViewController.h#import <UIKit/UIKit.h>#import "AsyncSocket.h"  //封装了基于tcp协议的socket编程//tcp协议是位于网络传输层的协议,规定客户端与服务端之间.或者是客户端与客户端之间数据通信的方式//每个客户端或者服务端通过ip地址+端口来标识/*客户端与服务端基于tcp协议进行数据通信 *1.客户端需要通过ip+端口连接指

基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2

继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案 [Xen-devel] XenStore as a data transfer path?  这篇帖子讨论了xenstore作为domain0和domainU传递自定义数据的可行性,在Xen架构里,xenstore用于domain0和多个domainU之间传递控制数据,根据Xenstore的文档,不适合用于传输过大的数据,它的设计目标是对domain0的应用层有非常好的可视性和可操作性(tdb格式数据

java不同对象之间的数据交互(通用)

??java中万物皆对象.不论你是线程,还是异步任务,还是...都可以用以下的三种通用方法来进行对象间数据的交互.当然android相比java有自己独特的数据交互方式,这些会在后面的文章中讲到,本篇文章意在对java通用的对象间的数据交互进行总结. 一.通过构造函数传递 ??构造函数很大程度上是方便参数的传递,以达到在新建对象的时候,同时对这个对象的一些属性进行初始化.我们经常需要根据自己的需要,重载类的构造方法.我们可以在对象初建的时候把它需要的数据传递给它,以实现不同对象之间数据的交互.

【Android笔记】ServerSocket 与 Socket的区别

1 ServerSocket类    创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如:    ServerSocket MyListener=new ServerSocket(600):    这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务.为了随时监听可能的Client请求,执行如下的语句:    Socket LinkSocket=MyListener.acce