导航:首页 > 编程语言 > javasocket客户端发送数据

javasocket客户端发送数据

发布时间:2023-05-25 02:31:27

⑴ 使用java socket怎么能够实现将一个客户端发送到服务端的消息转发到另一个客户端

用一个集合记住所有客户的Socket,收到数据包,就根据收发要求,转发

⑵ java中用serverSocket类如何向指定IP的客户端发送数据

byte[]buf;数据
InetAddressaddress=InetAddress.getByName(IP地址);
DatagramPacketdp=newDatagramPacket(buf,buf.length,address,Integer.parseInt(端口号));
DatagramSocketds=newDatagramSocket();
这种就可以发送数据

⑶ java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务器端如何知道

如果是一对一的话,不要用到线程,相当于一个1对1的聊天。主要是这,你看下

try{t.setText("服务端开启,等待客户端连接");
ss=new ServerSocket(50000);

}catch(IOException e){
System.err.println("无法在50000端口建立监听服务");
System.exit(1);
}

try{ s=ss.accept();
fstart=true;
t.append("\n和来自"+s.getInetAddress()+"客户端连接成功!\n");
t.append("\n你现在可以通信了");
dis=new DataInputStream(s.getInputStream());
kehu[1]=dis.readUTF();
}catch(IOException e){
System.err.println("和客户端建立服务失败");
System.exit(1);
}

try{

while(true){
dis=new DataInputStream(s.getInputStream());
dos=new DataOutputStream(s.getOutputStream());
t.append("\n客户端1:"+dis.readUTF());

}

}catch(IOException e){

}

}

⑷ java socket 客户端是如何向服务器端发送消息的

服务器端和客户端都是通过SOCKET来进行通信的,首先产生一个 socket实例,通过这个实例,服务器端调用accept这个方法接收来自客户端发送的信息.但是在产生socket实例的时候必须初始化一个端口.用来负责接受客户端的请求!
客户端要给服务器发送消息也必须产生一个socket实例,初始化的时候必须指定服务器的IP地址,并且指定服务接收的端口号,这样客户端才能找到服务器要接收的地方,找到地方就可以发送过去了。和你写信一样。找到地址
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

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

BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
这个只是用来获取一个从键盘的一个流.传送给服务器端的数据都是通过流来表示的。意思是是键盘输入的一个字节转化成字符流.并输出或者写入!

⑸ java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
public static final String IP_ADDR = "localhost";//服务器地址
public static final int PORT = 12345;//服务器端口号

public static void main(String[] args) {
System.out.println("客户端启动...");
System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
while (true) {
Socket socket = null;
try {
//创建一个流套接字并将其连接到指定主机上的指定端口升棚号
socket = new Socket(IP_ADDR, PORT);

//读取服务器端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
//向服务衫宽器端发送数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("请输入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(str);

String ret = input.readUTF();
System.out.println("服务器端返回过来的是: " + ret);
// 如接收到 "OK" 则断开连接
if ("OK".equals(ret)) {
System.out.println("客户端将关闭连接");
Thread.sleep(500);
break;
}

out.close();
input.close();
} catch (Exception e) {
System.out.println("客户吵塌则端异常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
}
}
}
}
}
}

⑹ java socket服务器发送信息给指定的客户端

一个客户端socket对象连接成功时,你保持这个连接状态不关闭,只要用这个对象发送的就谈答轮只会到那个客户端。
如果是短连接的话,你就需要用客户端的标识来保存好这个message,等举掘下次客户端再连接的时候,用含信标识找到message,然后发送给它。

⑺ java socket编程,客户端发送文件给服务器,服务器接收到文件后如何返回确认信息告诉客户端文件已接收

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.net.ServerSocket;
importjava.net.Socket;


/**
*
*文件名:ServerReceive.java
*实现功能:作为服务器接收客户端发送的文件
*
*具体实现过程:
*1、建立SocketServer,等待客户端的连接
*2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据
*其中保存客户端要发送的文件名和文件大小信息
*3、根据文件名在本地创建文件,并建立好流通信
*4、循环接收数据包,将数据包写入文件
*5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件
*6、文件接收工作结束
*
*
*【注:此代码仅为演示客户端与服务器传送文件使用,
*每一个数据包之前没有文件协议命令
*具体的协议传输和文件传出的使用阶段可根据自己程序自行放置】
*
*
*作者:小菜鸟
*创建时间:2014-08-19
*
**/
publicclassServerReceive{

publicstaticvoidmain(String[]args){

/**与服务器建立连接的通信句柄*/
ServerSocketss=null;
Sockets=null;

/**定义用于在接收后在本地创建的文件对象和文件输出流对象*/
Filefile=null;
FileOutputStreamfos=null;

/**定义输入流,使用socket的inputStream对数据包进行输入*/
InputStreamis=null;

/**定义byte数组来作为数据包的存储数据包*/
byte[]buffer=newbyte[4096*5];

/**用来接收文件发送请求的字符串*/
Stringcomm=null;


/**建立socekt通信,等待服务器进行连接*/
try{
ss=newServerSocket(4004);
s=ss.accept();
}catch(IOExceptione){
e.printStackTrace();
}


/**读取一行客户端发送过来的约定信息*/
try{
InputStreamReaderisr=newInputStreamReader(s.getInputStream());
BufferedReaderbr=newBufferedReader(isr);
comm=br.readLine();
}catch(IOExceptione){
System.out.println("服务器与客户端断开连接");
}

/**开始解析客户端发送过来的请求命令*/
intindex=comm.indexOf("/#");

/**判断协议是否为发送文件的协议*/
Stringxieyi=comm.substring(0,index);
if(!xieyi.equals("111")){
System.out.println("服务器收到的协议码不正确");
return;
}

/**解析出文件的名字和大小*/
comm=comm.substring(index+2);
index=comm.indexOf("/#");
Stringfilename=comm.substring(0,index).trim();
Stringfilesize=comm.substring(index+2).trim();


/**创建空文件,用来进行接收文件*/
file=newFile(filename);
if(!file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
System.out.println("服务器端创建文件失败");
}
}else{
/**在此也可以询问是否覆盖*/
System.out.println("本路径已存在相同文件,进行覆盖");
}

/**【以上就是客户端代码中写到的服务器的准备部分】*/


/**
*服务器接收文件的关键代码*/
try{
/**将文件包装到文件输出流对象中*/
fos=newFileOutputStream(file);
longfile_size=Long.parseLong(filesize);
is=s.getInputStream();
/**size为每次接收数据包的长度*/
intsize=0;
/**count用来记录已接收到文件的长度*/
longcount=0;

/**使用while循环接收数据包*/
while(count<file_size){
/**从输入流中读取一个数据包*/
size=is.read(buffer);

/**将刚刚读取的数据包写到本地文件中去*/
fos.write(buffer,0,size);
fos.flush();

/**将已接收到文件的长度+size*/
count+=size;
System.out.println("服务器端接收到数据包,大小为"+size);
}

}catch(FileNotFoundExceptione){
System.out.println("服务器写文件失败");
}catch(IOExceptione){
System.out.println("服务器:客户端断开连接");
}finally{
/**
*将打开的文件关闭
*如有需要,也可以在此关闭socket连接
**/
try{
if(fos!=null)
fos.close();
}catch(IOExceptione){
e.printStackTrace();
}//catch(IOExceptione)
}//finally

}//publicstaticvoidmain(String[]args)
}//publicclassServerReceive

⑻ 用Java socket 实现客户端与服务器之间的数据的发送与接受。。。双向的

下面是一个简单的通讯实例,进行Server和Client之间的文件传输。。如果是简单的文本传输的话简化掉文本操作的内容即可。。

1.服务器端

package sterning;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
int port = 8821;

void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
// 选择进行传输的文件
String filePath = "D:\\lib.rar";
File fi = new File(filePath);

System.out.println("文件长度:" + (int) fi.length());

// public Socket accept() throws
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

s = ss.accept();
System.out.println("建立socket链接");
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
dis.readByte();

DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(s.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush();

int bufferSize = 8192;
byte[] buf = new byte[bufferSize];

while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}

if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
s.close();
System.out.println("文件传输完成");
}

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

public static void main(String arg[]) {
new ServerTest().start();
}
}

2.socket的Util辅助类

package sterning;

import java.net.*;
import java.io.*;

public class ClientSocket {
private String ip;

private int port;

private Socket socket = null;

DataOutputStream out = null;

DataInputStream getMessageStream = null;

public ClientSocket(String ip, int port) {
this.ip = ip;
this.port = port;
}

/** *//**
* 创建socket连接
*
* @throws Exception
* exception
*/
public void CreateConnection() throws Exception {
try {
socket = new Socket(ip, port);
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
} finally {
}
}

public void sendMessage(String sendMessage) throws Exception {
try {
out = new DataOutputStream(socket.getOutputStream());
if (sendMessage.equals("Windows")) {
out.writeByte(0x1);
out.flush();
return;
}
if (sendMessage.equals("Unix")) {
out.writeByte(0x2);
out.flush();
return;
}
if (sendMessage.equals("Linux")) {
out.writeByte(0x3);
out.flush();
} else {
out.writeUTF(sendMessage);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
if (out != null)
out.close();
throw e;
} finally {
}
}

public DataInputStream getMessageStream() throws Exception {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
return getMessageStream;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null)
getMessageStream.close();
throw e;
} finally {
}
}

public void shutDownConnection() {
try {
if (out != null)
out.close();
if (getMessageStream != null)
getMessageStream.close();
if (socket != null)
socket.close();
} catch (Exception e) {

}
}
}

3.客户端

package sterning;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class ClientTest {
private ClientSocket cs = null;

private String ip = "localhost";// 设置成服务器IP

private int port = 8821;

private String sendMessage = "Windwos";

public ClientTest() {
try {
if (createConnection()) {
sendMessage();
getMessage();
}

} catch (Exception ex) {
ex.printStackTrace();
}
}

private boolean createConnection() {
cs = new ClientSocket(ip, port);
try {
cs.CreateConnection();
System.out.print("连接服务器成功!" + "\n");
return true;
} catch (Exception e) {
System.out.print("连接服务器失败!" + "\n");
return false;
}

}

private void sendMessage() {
if (cs == null)
return;
try {
cs.sendMessage(sendMessage);
} catch (Exception e) {
System.out.print("发送消息失败!" + "\n");
}
}

private void getMessage() {
if (cs == null)
return;
DataInputStream inputStream = null;
try {
inputStream = cs.getMessageStream();
} catch (Exception e) {
System.out.print("接收消息缓存错误\n");
return;
}

try {
//本地保存路径,文件名会自动从服务器端继承而来。
String savePath = "E:\\";
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
int passedlen = 0;
long len=0;

savePath += inputStream.readUTF();
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(newBufferedOutputStream(new FileOutputStream(savePath))));
len = inputStream.readLong();

System.out.println("文件的长度为:" + len + "\n");
System.out.println("开始接收文件!" + "\n");

while (true) {
int read = 0;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read == -1) {
break;
}
//下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (passedlen * 100/ len) + "%\n");
fileOut.write(buf, 0, read);
}
System.out.println("接收完成,文件存为" + savePath + "\n");

fileOut.close();
} catch (Exception e) {
System.out.println("接收消息错误" + "\n");
return;
}
}

public static void main(String arg[]) {
new ClientTest();
}
}

⑼ java socket如何实现客户端与客户端的交互

1、服务端监听一个端口,其它客户端都通过这个端口和服务端进行通信。
2、每个客户端连接上来,服务端给其一个标识ID。然后向其它所有客户端广播一下有新客户端接入,ID多少。
3、客户端要向客户端发送消息,可以以消息包的形式发送,就是把目的客户端的标识和发送的内容组成一个数据包发往服务器,服务器读取就知道要向哪 个客户端发送数据,然后把内容往目的客户端通道发送

⑽ java socket发送数据的类型

在Socket通信中,要在客户端和服务端中传输数据,传输的数据有各种类型包括:int,short,long以及版String,甚至是自定义的各种Object,如何能权够保证在服务端和客户端之间的数据能够使得两端都能理解,这就是所谓的“应用协议“。

在通信的“管道”中,流的都是二进制数据,所以,双方如何约定好“解析规则”,则就必须要求通信双方都预先制定好协议。

阅读全文

与javasocket客户端发送数据相关的资料

热点内容
繁体中文输入工具 浏览:916
pc桌面壁纸文件夹 浏览:473
微信怎么添加群 浏览:781
40岁男人适合的微信名 浏览:925
编程里比例怎么打 浏览:215
苹果12两个app如何分屏 浏览:592
ps下载完不是压缩文件 浏览:362
电脑中的个人文件包括什么 浏览:572
网络连接一般什么密码 浏览:199
java定时器quartz实例 浏览:259
稻壳excel文件太大怎么弄 浏览:901
文件里的视频如何保存到相册 浏览:428
手机百度云文件电脑 浏览:957
编程怎么做到时钟精准 浏览:912
锤子用过的壁纸在哪个文件里 浏览:468
qq网站安全性未知访问不了怎么办 浏览:270
燕秀怎么修改编程人名字 浏览:789
2012年天之眼导航升级 浏览:595
如何安装视频文件 浏览:315
红米2A升级miui9 浏览:927

友情链接