javasocket客户端程序(websocket服务端java)

本篇文章给大家谈谈javasocket客户端程序,以及websocket服务端java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、求一个简单JAVA, socket 客户端 .2、基于JAVA socket的服务器客户端编程3、[java]利用socket class作成客户端程序4、求一个JAVA socket客户端程序,急!!!5、JAVA 问题,用socket编写一个客户端程序

求一个简单JAVA, socket 客户端 .

给你一个简单的示例代码吧。服务器,客户端的都有。

客户端:

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

public class TCPClent {

public static void main(String[] args) throws UnknownHostException,

IOException {

Socket socket = new Socket(“www.easyaq.com”, 5000);

OutputStream outputStream = socket.getOutputStream();

outputStream.write((“connect to the server at time ” + new Date()

.toString()).getBytes());

outputStream.flush();

System.out.println(socket);

InputStream is = socket.getInputStream();

byte[] bytes = new byte[1024];

int n = is.read(bytes);

System.out.println(new String(bytes, 0, n));

is.close();

socket.close();

}

}

服务器:

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Date;

public class TCPServer {

static int i = 1;

public static void main(String[] args) throws IOException {

ServerSocket serverSocket = new ServerSocket(5000);

while (true) {

final Socket socket = serverSocket.accept();

new Thread() {

Socket mySocket = socket;

@Override

public void run() {

try {

System.out.println(mySocket);

InputStream is = mySocket.getInputStream();

byte[] bytes = new byte[1024];

int n = is.read(bytes);

System.out.println(new String(bytes, 0, n));

OutputStream os = mySocket.getOutputStream();

os.write((i++ + “:server reply at time ” + new Date()

.toString()).getBytes());

mySocket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

}

}

javasocket客户端程序(websocket服务端java)

基于JAVA socket的服务器客户端编程

要完成这个工作,需要完成三个部分的工作,以下依次说明:

一、建立服务器类

Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。

ServerSocket server = new ServerSocket(9998)

这条语句创建了一个服务器对象,这个服务器使用9998号端口即在端口9998上注册服务,这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。

Socket incoming = server.accept() ; // 监听窗口,等待连接

进而得到输入流和输出流,并进行封装

BufferedReader in = new BufferedReader(new

InputStreamReader(incoming.getInputStream()));

/*

当读取文件时,先把内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称“缓存字节读取方式”)。

*/

PrintWriter ut = new PrintWriter(incoming.getOutputStream(),true);

随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是先关闭输出流,再关闭输入流,即使用

out.close();

in.close();

二、建立客户端代码

相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的ip以及服务器的端口作为参数创建一个Socket对象。得到这个对象后,就可以用”建立服务器”部分介绍的方法实现数据的输入和输出。

Socket socket = new Socket(“168.160.12.42”,9998);

或:

Socket socket = new Socket(InetAddress.getLocalHost(),5678); // 向主机名为InetAddress.getLocalHost()的服务器申请连接

客户机必须知道有关服务器的IP地址,对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供,它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(),true);

以上的程序代码建立了一个Socket对象,这个对象连接到ip地址为168.160.12.42的主机上、端口为9998的服务器对象。并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。

三、实例分析

服务方:

import java.io.*;

import java.net.*;

public class MyServer {

public static void main(String[] args) throws IOException{

ServerSocket server=new ServerSocket(5678); //在端口5678上注册服务

Socket client=server.accept(); // 监听窗口,等待连接

BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));

BufferedReader serverInput=new BufferedReader(new InputStreamReader(System.in));

PrintWriter ut=new PrintWriter(client.getOutputStream());

while(true){

String str=in.readLine(); //// 读取从client传来的数据信息

str = serverInput.readLine(); // 读取用户键盘输入的字符串

System.out.println(str); //服务器控制台输出数据信息

out.println(“has receive….”); //服务器向客户端发送信息:has receive….

out.flush();

if(str.equals(“end”))

break;

}

client.close();

}

}

这个程序的主要目的在于服务器不断接收客户机所写入的信息只到,客户机发送”End”字符串就退出程序,并且服务器也会做出”Receive”为回应,告知客户机已接收到消息。

客户机代码:

import java.net.*;

import java.io.*;

public class Client{

static Socket server;

public static void main(String[] args)throws Exception{

server=new Socket(InetAddress.getLocalHost(),5678); // 向主机名为InetAddress.getLocalHost()的服务器申请连接

BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); //客户端建立输入流并进行封装

PrintWriter ut=new PrintWriter(server.getOutputStream());

BufferedReader wt=new BufferedReader(new InputStreamReader(System.in)); //客户端从键盘输入信息

while(true){

String str=wt.readLine(); //客户端读取(获得)键盘的字符串

String str1=in.readLine(); // 从服务器获得字符串

out.println(str); //客户端向服务器发送信息

out.flush();

if(str.equals(“end”)){

break;

}

System.out.println(in.readLine());

}

server.close();

}

}

客户机代码则是接受客户键盘输入,并把该信息输出,然后输出”End”用来做退出标识。

这个程序只是简单的两台计算机之间的通讯,如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢?

其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身,而服务器通过accept方法就是同意和客户建立通讯.这样当客户建立Socket的同时。服务器也会使用这一根连线来先后通讯,那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下:

服务器:

import java.io.*;

import java.net.*;

public class MyServer {

public static void main(String[] args) throws IOException{

ServerSocket server=new ServerSocket(5678);

while(true){

Socket client=server.accept();

BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter ut=new PrintWriter(client.getOutputStream());

while(true){

String str=in.readLine();

System.out.println(str);

out.println(“has receive….”);

out.flush();

if(str.equals(“end”))

break;

}

client.close();

}

}

}

这里仅仅只是加了一个外层的While循环,这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的”End”消息.那么现在就实现了多客户之间的交互了。但是.问题又来了,这样做虽然解决了多客户,可是是排队执行的。也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互,无法做到同时服务,那么要如何才能同时达到既能相互之间交流又能同时交流呢?很显然这是一个并行执行的问题了。所以线程是最好的解决方案。

那么下面的问题是如何使用线程.首先要做的事情是创建线程并使得其可以和网络连线取得联系。然后由线程来执行刚才的操作,要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了.而要执行线程就必须重写run方法,而run方法所做的事情就是刚才单线程版本main所做的事情,因此我们的程序变成了这样:

import java.net.*;

import java.io.*;

public class MultiUser extends Thread{

private Socket client;

public MultiUser(Socket c){

this.client=c;

}

public void run(){

try{

BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter ut=new PrintWriter(client.getOutputStream());

//Mutil User but can’t parallel

while(true){

String str=in.readLine();

System.out.println(str);

out.println(“has receive….”);

out.flush();

if(str.equals(“end”))

break;

}

client.close();

}catch(IOException ex){

}finally{

}

}

public static void main(String[] args)throws IOException{

ServerSocket server=new ServerSocket(5678);

while(true){

//transfer location change Single User or Multi User

MultiUser mu=new MultiUser(server.accept());

mu.start();

}

}

}

我的类直接从Thread类继承了下来.并且通过构造函数传递引用和客户Socket建立了联系,这样每个线程就有了。一个通讯管道.同样我们可以填写run方法,把之前的操作交给线程来完成,这样多客户并行的Socket就建立起来了。

[java]利用socket class作成客户端程序

嘿嘿 为了一百分啊 都有注解哦

逻辑和操作分开 比较好看哈

import java.io.*;

import java.net.*;

import java.util.Random;

public class SelectNumberClient{

private String address = “127.0.0.1”;//地址

private int port = 3939;//端口

private Socket socket;//套接字

private DataOutputStream dos;//输出流

private DataInputStream dis;//输入流

private Random random;

private int shuzi;//猜测的数字

//初始化:与服务器连接获取套接字

private boolean init(){

try{

socket = new Socket(address,port);

dos = new DataOutputStream(socket.getOutputStream());

dis = new DataInputStream(socket.getInputStream());

}catch(IOException ioe){

System.out.println(“连接错误,请重试:错误信息:”+ioe.getMessage());

return false;

}

random = new Random();

return true;

}

//发送并接受数据

private int sentAndGet(int i){

try{

dos.writeInt(i);

return dis.readInt();

}catch(IOException ioe){

ioe.printStackTrace();

return -3;

}

}

//得到两数之间的随机数

private int getRanInt(int i,int j){

return random.nextInt(j-i+1)+i;

}

//逻辑处理

private boolean luoji(){

int i=1,j=1000,temp,temp2;

while(true){

shuzi = getRanInt(i,j);

temp = sentAndGet(shuzi);

if(temp==0)break;

if(temp==-1)j=shuzi-1;

if(temp==-2)i=shuzi+1;

if(temp==-3){

System.out.println(“IOErrer”);

return false;

}

}

return true;

}

//关闭

private void close(){

try{

if(socket!=null)socket.close();

if(dis!=null)dis.close();

if(dos!=null)dos.close();

}catch(Exception e){

e.printStackTrace();

System.out.println(“连接错误,请重试,”);

}

}

//业务处理

public void star(){

if(init()){

if(luoji()){

System.out.println(“服务器上的数字是”+shuzi+”\n”);

}else{

System.out.println(“连接错误,请重试”);

}

close();

}

}

public static void main(String[] args){

new SelectNumberClient().star();

}

}

求一个JAVA socket客户端程序,急!!!

客户端输入“time”请求当前时间,输入“info”请求服务器信息,输入“bye”退出,输入其他和服务器对话。

服务器端:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Calendar;

public class Server {

// 定义数据成员

public static final int port = 8000;

ServerSocket server = null;

Socket socket = null;

BufferedReader in = null;

PrintStream out = null;

BufferedReader userin = null;

public Server() {

try {

server = new ServerSocket(port); // 创建一个倾听Socket

} catch (Exception e) {

System.out.println(“异常:” + e);

}

}

void acceptSocket() {

try {

socket = server.accept(); // 等待客户机连接请求

System.out.println(“serversocket: ” + socket);

} catch (Exception e) {

System.out.println(“异常:” + e);

}

}

void creatInOut() {

try {

// 通过Socket获取连接上的输入流

in = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

// 通过Socket获取连接上的输出流

out = new PrintStream(socket.getOutputStream());

} catch (Exception e) {

System.out.println(“异常:” + e);

}

}

void talk() {

String str; // 存放接收到的字符串

try {

// 创建标准输入流,从键盘接收数据

userin = new BufferedReader(new InputStreamReader(System.in));

while (true) {

System.out.println(“等待客户端的消息…”);

str = in.readLine(); // 读取客户端发送的数据

System.out.println(“客户端saying:” + str);

if (str.equals(“bye”))

break;

System.out.print(“给客户端发送:”);

if (str.equals(“time”))// 请求时间

str = “当前时间:” + Calendar.getInstance().getTime();

else if (str.equals(“info”)) {// 请求信息

str = “服务器IP:” + socket.getInetAddress().getHostAddress()

+ ” 服务器端口:” + server.getLocalPort();

} else

str = userin.readLine(); // 从键盘接收数据

out.println(str); // 发送数据给客户端

out.flush();

System.out.println(str);

if (str.equals(“bye”))

break;

}

out.close();

in.close();

socket.close();

server.close();

} catch (Exception e) {

System.out.println(“异常:” + e);

}

}

public static void main(String args[]) {

Server server = new Server();

server.acceptSocket();

server.creatInOut();

server.talk();

}

}

客户端:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.InetAddress;

import java.net.Socket;

public class Client {

public static void main(String[] args) {

String str;

try {

InetAddress addr = InetAddress.getByName(“127.0.0.1”);

Socket socket = new Socket(addr, 8000);// 发出连接请求

System.out.println(“clientsocket=” + socket);

BufferedReader in = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

// 连接建立,通过Socket获取连接上的输入流

PrintStream out = new PrintStream(socket.getOutputStream());

// 连接建立,通过Socket获取连接上的输出流

BufferedReader userin = new BufferedReader(new InputStreamReader(

System.in));

// 创建标准输入流,从键盘接收数据

while (true) {

System.out.print(“发送字符串:”);

str = userin.readLine(); // 从标准输入中读取一行

out.println(str); // 发送给服务器

if (str.equals(“bye”))

break;

System.out.println(“等待服务器端消息…”);

str = in.readLine(); // 读取服务器端的发送的数据

System.out.println(“服务器saying:” + str);

if (str.equals(“bye”))

break;

}

out.close();

in.close();

socket.close();

} catch (Exception e) {

System.out.println(“异常:” + e);

}

}

}

JAVA 问题,用socket编写一个客户端程序

给你一个我写的示例,用的是基于TCP的Socket技术,你锻炼一下,改一改,不会改再找我!

客户端:

import java.net.Socket;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.InputStreamReader;

import java.io.BufferedReader;

public class TcpClient {

public static void main(String[] args) throws Exception

{

//创建客户端Socket服务,并且制定主机和duank

Socket s = new Socket(“192.168.1.104”,10002);//连接固定的主机和端口

//为了发送数据,获取Socket中的输入输出流

OutputStream out = s.getOutputStream();

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String line = null;

//读取服务器发过来的数据

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

while((line = br.readLine())!=null)

{

out.write(line.getBytes());

if(“886”.equals(line))

break;

int len = in.read(buf);

String content = new String(buf,0,len);

System.out.println(“Server:”+content);

}

s.close();

}

}

服务器:

/*

* 需求分析:

* 使用TCP协议,写服务器端。做到服务器能收到客户端的信息,也能向客户端发送信息

* */

package JavaNetProgramming;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.InputStreamReader;

import java.io.BufferedReader;

public class TcpServer {

public static void main(String[] args) throws Exception

{

//建立服务器的Socket服务,并且监听一个端口

ServerSocket ss = new ServerSocket(10002);

Socket s = ss.accept();

InputStream is = s.getInputStream();

//从服务器端向客户端发送数据

OutputStream out = s.getOutputStream();

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String line = null;

while(true)

{

//通过accept()方法获得客户端传过来的Socket对象

//System.out.println(“getByNanme():”+s.getInetAddress());

System.out.print(“getHostAddress():”+s.getInetAddress().getHostAddress());

//获取客户端发过来的数据,就要使用客户端对象的读取流来读取数据

byte[] buf = new byte[1024];

int len = is.read(buf);//把流中数据读到字节数组中

String content = new String(buf,0,len);

System.out.println(” “+content);

if(“886”.equals(content))

break;

while((line = br.readLine())!=null)

{

out.write(line.getBytes());

break;

}

}

s.close(); //循环内有判断语句,这句话才不出错

ss.close();

}

}

javasocket客户端程序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于websocket服务端java、javasocket客户端程序的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月3日 13:34:51
下一篇 2024年4月3日 13:45:24

相关推荐

  • linux用户态编程,在linux中程序用户可能使用的uid是多少

    Linux内核态程序和用户态程序的区别 当CPU处于内核态,可以随意进入用户态;而当CPU处于用户态,只能通过中断的方式进入内核态。 我们都知道程序在执行的过程中是离不开栈的数据结构,操作系统在创建程序进程的同时会创建与该程序对应的两个栈结构,分别用于用户态程序执行与内核态程序执行。 linux内核编程和用户应用程序编程最大的不同是,前者是在内核态下运行的,…

    2024年5月20日
    3900
  • 如何用mac写c语言程序,如何用mac写c语言程序文件

    Mac系统怎样使用终端编写c语言程序 Mac电脑上使用终端来编写c语言程序。找到终端。打开终端,输入 cd /Users/mac/desktop/c到指定目录文件夹下。输入 vim hello.c,用vim编辑hello.c文件。按i进入编辑状态,输入要程序的代码。 使用Xcode软件。Xcode是一个苹果系统上的集成开发环境(IDE),就是说用Xcode就…

    2024年5月20日
    6000
  • c语言编写计算器程序,c语言编写计算器程序的概要设计和详细设计的内容

    简单的用c语言写一个计算器程式,加减乘除能用就好 1、以下程序计算加减乘除,先乘除后加减,不支持小括号等其他运算。 2、分类: 电脑/网络 程序设计 其他编程语言 问题描述:编程:编程实现一个简单的四则运算计算器:从键盘输入一个四则运算表达式(没有空格和括号),遇等号=说明输入结束,输出结果。 3、C语言编写计算器 我们可以用printf和scanf函数输出…

    2024年5月20日
    2900
  • linux链接库调用,linux 查看程序链接库

    怎么条用linux中动态链接库里面的函数 使用命令:gcc -o main main.c -L ./ -ltiger 2-L指定动态链接库的路劲,-ldtiger链接库函数tiger。-ltiger是动态库的调用规则。 执行qmake main.pro生成makefile文件,然后执行make,可以看到生成了libMyTest可执行文件。 运行查看结果iSu…

    2024年5月20日
    3200
  • 小甲鱼c语言63,c语言经典程序100例小甲鱼

    小甲鱼c语言入门讲的怎么样?听过的同学觉得怎么样 大体扫了一下,小甲鱼的内容更合理(可能是比较新的缘故),但是口才很一般。郝斌讲的非常通俗易懂,口才可能是网络上所有视频教学类里出类拔萃的了,看B站下面的回复就知道了,但是毕竟是多年前的视频。 清华毕业的。小甲鱼不仅是鱼C工作室创始人,创办的鱼C论坛现注册用户110多万,还是一名B站编程科普博主,粉丝累计79+…

    2024年5月20日
    7200
  • c语言中的暴力破解问题,c语言破解程序

    c语言一个小算法,求大神指点 统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。 xdef-0xabc = 0x333,这个上面的几位已经说得很清楚了。 //怎样用c语言写一个将小数转化成最简分数的算法 //开始 dou…

    2024年5月20日
    4900
  • c语言生成随机整数数,c语言产生50个随机整数程序

    c语言随机数怎么生成 1、rand返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。 2、在实际编程中,我们经常需要生成随机数。在c语言中我们通常使用rand方法生成随机数,在调用ra…

    2024年5月20日
    4400
  • java开发服务端接口,java游戏服务端开发是干嘛

    如何使用JAVAweb实现接口对接? 1、一般是用webservice来实现这种对接需求。 2、前端和后端连接方式取决于应用程序的需求和技术栈,java常见的五种连接方式如下:RESTful API使用RESTful API是最常见的前后端连接方式,前端通过HTTP请求与后端进行通信,并获取或提交数据。 3、首先你要找一个提供免费天气接口调用的公司,比如百度…

    2024年5月20日
    4000
  • c语言取余运算程序,c语言取余的用法

    c语言中怎样取余数 很简单,只需要一步,也就是只需要一张图:C语言提供了一个取余数的运算符%,称之为“模”运算符。只有两个整数之间才可以进行模运算!a % b 表示 用b来整除a,商整数,得到余数。 【1】首先请打开Visual C++ 0,(本文使用Visual C++ 0软件操作,也可使用Visual Studio或其他C/C++编程软件。),打开成功后…

    2024年5月20日
    3300
  • java简单的记事本程序,使用java实现记事本超详细解释

    使用记事本编写JAVA程序,并运行输出结果,具体的实现步骤是什么?_百度… 1、编写Java源代码文件,例如HelloWorld.java。可以使用任何文本编辑器来编写Java源代码,包括记事本(Notepad)。打开记事本(Notepad)并在其中粘贴或输入Java源代码。保存Java源代码文件,例如保存为HelloWorld.java。 2、…

    2024年5月20日
    3100

发表回复

登录后才能评论



关注微信