JAVA问题:用socket编写一个服务器端程序

JAVA问题:用socket编写一个服务器端程序,第1张

服务端:

ServerSocket serverSocket = new ServerSocket(2008);

while (true) {

Socket socket = serverSocketaccept();

MyThread thread = new MyThread(socket);

threadstart();

}public class MyThread extends Thread {

private Socket socket;

public MyThread(Socket socket) {

thissocket = socket;

}

@Override

public void run() {

superrun();

try {

InputStream is = socketgetInputStream();

BufferedReader bufReader = new BufferedReader(new InputStreamReader(is));

String line = "";

String s = "";

while ((s = bufReaderreadLine()) != null) {

line = line + s;

}

Systemoutprintln("接收到:" + line);

} catch (IOException e) {

eprintStackTrace();

}

}

}

客户端:

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

Socket socket=new Socket("1921680101", 2008);

OutputStream out=socketgetOutputStream();

PrintWriter pw=new PrintWriter(new OutputStreamWriter(out));

pwprint("12345上山打老虎");

pwflush();

pwclose();

outclose();

}

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

客户端:

import javanetSocket;

import javaioInputStream;

import javaioOutputStream;

import javaioInputStreamReader;

import javaioBufferedReader;

public class TcpClient {

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

{

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

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

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

OutputStream out = sgetOutputStream();

InputStreamReader isr = new InputStreamReader(Systemin);

BufferedReader br = new BufferedReader(isr);

String line = null;

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

InputStream in = sgetInputStream();

byte[] buf = new byte[1024];

while((line = brreadLine())!=null)

{

outwrite(linegetBytes());

if("886"equals(line))

break;

int len = inread(buf);

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

Systemoutprintln("Server:"+content);

}

sclose();

}

}

服务器:

/

需求分析:

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

/

package JavaNetProgramming;

import javanetServerSocket;

import javanetSocket;

import javaioInputStream;

import javaioOutputStream;

import javaioInputStreamReader;

import javaioBufferedReader;

public class TcpServer {

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

{

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

ServerSocket ss = new ServerSocket(10002);

Socket s = ssaccept();

InputStream is = sgetInputStream();

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

OutputStream out = sgetOutputStream();

InputStreamReader isr = new InputStreamReader(Systemin);

BufferedReader br = new BufferedReader(isr);

String line = null;

while(true)

{

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

// Systemoutprintln("getByNanme():"+sgetInetAddress());

Systemoutprint("getHostAddress():"+sgetInetAddress()getHostAddress());

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

byte[] buf = new byte[1024];

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

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

Systemoutprintln(" "+content);

if("886"equals(content))

break;

while((line = brreadLine())!=null)

{

outwrite(linegetBytes());

break;

}

}

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

ssclose();

}

}

分为两种模式:TCP和UDP

TCP有客户端(Client)和服务端(Server)的概念,服务端指定一个ip和端口(port)并且监听是否有客户端接入,客户端通过ip+port连接到服务端,通过socket得到输入输出流,他们之间的通信都是通过流(Stream)进行的,一个服务端可以接入多个客户端,客户端之间的通信依赖于服务端的转发。

UDP并没有严格的客户端和服务端的区别,你只需要建立一个socket指定你要发送的目标ip和port就行了,他是以数据包的形式发送数据(DataPacket),数据包里面存放的是byte[],有需要的话可补充具体实现源码

先运行服务器端类,然后再运行客户端类,就可以了

/

服务器端类

/

public class Server {

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

Server server = new Server();

serverstart();

}

public void start() throws IOException{

//ServerSocket 对当前服务器的服务端口的绑定

//这个端口号不能重复绑定,不能同时执行两边

ServerSocket ss = new ServerSocket(8888);

while(true){

//accept 开始等待(IO Block)客户连接(启动监听),如果没有客户端连接,一直挂起等待下去。

//如果有客户端连接,才会继续执行下去,返回的Socket实例s 代表对于客户端连接。

Socket s = ssaccept();

//创建并启动客户服务线程,为客户服务

//当前线程再次返回到accept等待,下一个客户连接

new Service(s)start();//创建线程

}

}

class Service extends Thread{

Socket s;

public Service(Socket s){

thiss = s;

}

public void run(){

try{

//s代表客户端

//s 中的in代表从客户传递过来的流

//s 中的out代表从服务器到客户端传输流

InputStream in = sgetInputStream();

Scanner sc = new Scanner(in);//Systemin是 *** 作系统后台

OutputStream out = sgetOutputStream();

//outwrite("您好!您需要点啥?\n"getBytes("GBK"));

//outflush();//清理缓冲,确保发送到客户端

while(true){

String str = scnextLine();//IO Block

if(strequals("连接服务器")){

outwrite("连接成功!\n"getBytes("GBK"));

outflush();

break;

}

}

}catch(IOException e){

eprintStackTrace();

}

}

}

}

/

客户端类

/

public class Client {

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

// new Socket() 连接到指定的服务器端口,当前用的是本机的端口

Socket s = new Socket("localhost", 8888);

//返回s代表连接到了服务器

//s代表对服务器的连接

InputStream in = sgetInputStream();

OutputStream out = sgetOutputStream();

outwrite("连接服务器\n"getBytes("gbk"));

outflush(); //清理缓冲,确保发送到服务端

Scanner sc = new Scanner(in);

String str = scnextLine();

Systemoutprintln(str); //把从服务器返回的信息,打印到控制台。

outflush();

}

}

以上就是关于JAVA问题:用socket编写一个服务器端程序全部的内容,包括:JAVA问题:用socket编写一个服务器端程序、JAVA 问题,用socket编写一个客户端程序、java socket编程怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9774768.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存