1、java中用socket实现客户端与服务端双向连接问题
//服务端程序://服务器测试结果:
客户端:192.168.0.200发来消息:001 byte
客户端:192.168.0.200发来消息:byte
客户端:192.168.0.200 已断开连接!
客户端:192.168.0.200发来消息:adasd
客户端:192.168.0.200 已断开连接!
//客户端测试结果:
---001号客户端--
001 byte
服务器:192.168.0.200发来消息:001 byte
byte //001礼貌说跟服务器说byte
---002号客户端--
adasd //002客户端直接关闭程序
服务器:192.168.0.200发来消息:adasd
2、java的服务器端socket的accept()方法返回值为什么是客户端的socket类型
其实复不管是服务器制还是客户端都是使用的socket,接通之后服务器会产生针对这个客户端的一个socket,当有多个客户端连接上去了,他们互不干扰,是同类型不同的对象。服务器和客户端主要的区别就在这,客户端是一个Socket,服务器却可以有很多个。每次当有新的客户端连接是,服务器会生成一个新的socket来响应,但是我不清楚Java中的服务器是否自带多线程,如果不自带的话,想要程序并发的同时处理响应多个客户端的连接,注意在获取到Socket之后交给线程处理。
3、java 如何在服务器端用socket创建一个监听端口,并对接受的数据进行处理,端口号为3333,请高手指点一下
我百度HI你好了
public class Test {
public static void main(String[] args) {
Test1 t=new Test1();
t.start(); //启动线程
}
}
/**
* 继承一个线程类
* @author Administrator
*
*/
class Test1 extends Thread{
private ServerSocket server = null;
public Test1(){
try {
server=new ServerSocket(3333);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("服务端初始化失败!");
}
}
/**
* 继承父类方法
*/
public void run(){
Socket clientSocket = null;
DataInputStream dis =null;
DataOutputStream dos=null;
String str="";
while(true){
try {
clientSocket=server.accept();
dis = new DataInputStream(clientSocket.getInputStream());//获取输入流,用于接收客户端发送来的数据
dos = new DataOutputStream(clientSocket.getOutputStream());//获取输出流,用于客户端向服务器端发送数据
str=dis.readUTF(); //这里是客户端发送来的数据
/*
* 这里边你就可以做你想操作的事情了
*/
dos.writeUTF("这里是返回到客户端的数据");//这里用来向客户端返回数据
dis.close();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4、在java中如何用Socket 进行 服务器端和客户端交互的,具体一点。
打横杠是因为那个方法已经过时了现在已经不怎么用了。。。
Socket 服务器: 1先创建 ServerSocket ss = new ServerSocket(端口号)
2 接收请求 Socket s = ss.accept()
3接收消息 先读后写BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream(),"utf-8"));
String str = in.readLine(); PrintWriter out = new PrintWriter
( new BufferedWriter( new OutputStreamWriter(s.getOutputStream())),true);
out.println("服务器信息");
4关闭流out.close();
in.close();
is.close();
客户端 1、通过IP地址和端口实例化Socket,请求连接服务器
2、获取Socket上的流以进行读写。
3、对流包装进BufferedReader/PrintWriters实例
4、关闭打开的流
5、服务器端是用java直接写socket呢?还是用tomcat之类的呢?
不要重复造轮子,除非你写的比tomcat更好。
6、Java中服务器端ServerSocket对象怎么获取服务器端地址和端口号??,怎么获取远程请求的
ServerSocket s = new ServerSocket(8888);
while (true) {
// 建立连接
Socket socket = s.accept();
/ /getInetAddress()获取远程ip地址,getPort()远程客户端的断后好
"你好,客户端地址信息: " + socket.getInetAddress() + "\t客户端通信端口号: " + socket.getPort()
7、编写代码,使用java ServerSocket创建服务器端ServerSocket的过程。
服务器端代码:
import java.io.IOException;另附客户端:
8、java的客户端用的是Socket,服务器端用SocketChannel,这两种能实现通信么? 说得比较白,望理解
Socket 和ServerSocke 是一对 他们是java.net下面实现socket通信的类
SocketChannel 和ServerSocketChannel是一对 他们是java.nio下面实现通信的类 支持版异步通信
服务器必权须先建立ServerSocket或者ServerSocketChannel 来等待客户端的连接
客户端必须建立相对应的Socket或者SocketChannel来与服务器建立连接
服务器接受到客户端的连接受,再生成一个Socket或者SocketChannel与此客户端通信
不过Socket和SocketChannel可以通过 socket.channel() SocketChannel.socket() 方法相互转换
同理ServerSocket 和ServerSocketChannel 也可以相互转换
9、java socket服务器实现
下面是一个简单的通讯的例子,来传输服务器和客户端之间传输文件。 。如果它是一个简单的文本传输内容到文字的话来简化操作了。 。 。
1服务器
包sterning;
进口java.io.BufferedInputStream中;
进口java.io.DataInputStream中; 进口java.io.DataOutputStream中;
进口的java.io.File;
进口java.io.FileInputStream中;
进口java.net.ServerSocket的;
进口的java。 net.Socket;
公共类ServerTest {
整数端口= 8821;
无效启动(){
插座S = NULL;
尝试{
ServerSocket的SS =新的ServerSocket(端口);
而(真){
/ /选择要
字符串文件路径=传输的文件“D:\ \ lib中的RAR”;
文件FI =新的文件(文件路径);
System.out.println(“文件长度:”+(int)的fi.length());
/ /公共套接字accept()方法抛出
/ / IOException异常监听并接受此套接字连接。这种方法已经在连接之前被封锁。
S = ss.accept();
System.out.println(“建立socket连接”);
数据输入流DIS =新的数据输入流(新的缓冲输入流(S.的getInputStream()));
dis.readByte();
数据输入流FIS =新的数据输入流(新的缓冲输入流(新文件输入流(文件路径)));
数据输出流PS =新的数据输出流(s.getOutputStream());
/ /文件名,长度到客户端。要真的在这里适用所有平台,如处理中国的名字,但还需要进行处理,具体想想在Java第四届你可以看到,有现成的代码。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((长)fi.length());
ps.flush();
整型的bufferSize = 8192;
的byte [] buf中=新的字节[的bufferSize];
而(真){
整数读= 0;
如果{
阅读= fis.read(BUF)(FIS = NULL!);
如果(读== -1){
突破;
ps.write(BUF,0,读);
ps.flush();
/ /注意关闭套接字连接哦,否则客户端将等待数据服务器过,
/ /直到套接字超时,导致数据不完整。
fis.close();
S.CLOSE();
System.out.println(“文件传输完毕”);
}赶上(例外五){
e.printStackTrace();
公共静态无效的主要(字串ARG []){
新ServerTest()开始();。的使用率辅助类
包sterning
}
}
2。底座;
程序import java.net *;。
进口java.io. *;
公共类ClientSocket的{
私有String IP;
私人INT端口;
私人Socket套接字= NULL;
数据输出流出来= NULL;
数据输入流getMessageStream = NULL;
公共ClientSocket的(字符串的ip,诠释端口){
this.ip = IP;
this.port =口;
/ *** / / **
*创建一个socket连接
*
* @抛出异常
*例外 BR /> * /
公共无效创建连接()抛出异常{尝试{
插座=新的Socket(IP,端口);
}赶上(例外五){
e.printStackTrace();!
如果(插座= NULL)
socket.close();
扔é;
} {终于
}
}
公共无效的sendMessage(字符串的sendMessage)抛出异常{
尝试{
出=新的数据输出流( socket.getOutputStream());
如果(sendMessage.equals(“视窗”)){
out.writeByte(0X1);
了out.flush();
返回;
}
如果(sendMessage.equals(“UNIX”)){
out.writeByte(0X2);
了out.flush();
返回;
}
如果(sendMessage.equals(的“Linux”)){
out.writeByte(0x3的);
了out.flush();
}其他{
out.writeUTF(的sendMessage);
了out.flush();
赶上(例外五){
e.printStackTrace();
如果(!出= NULL)
out.close();
扔é;
} {终于
}
}
公开数据输入流getMessageStream()抛出异常{
{
getMessageStream =新的数据输入流(新缓冲输入的尝试(socket.getInputStream()));
返回getMessageStream;
}赶上(例外五){
e.printStackTrace();!
如果(getMessageStream = NULL)
getMessageStream.close();
扔é;
} {终于
}
}
公共无效shutDownConnection(){
尝试{
如果(!出= NULL) out.close();
getMessageStream.close()(getMessageStream =空!);
如果(插座= NULL!)
socket.close();。
}赶上(例外五){
3客户端
包sterning ;
进口java.io.BufferedOutputStream;
进口java.io.DataInputStream中;
进口java.io.DataOutputStream中;
进口java.io.FileOutputStream中;
公共类ClientTest {
私人ClientSocket的CS = NULL;
私人字符串的ip =“本地主机”;/ /设置服务器IP
私人INT端口= 8821;
私人字符串的sendMessage =“Windwos下”;
公共ClientTest(){
{
尝试,如果(创建连接()){
的sendMessage();
的getMessage();
}赶上(例外){
ex.printStackTrace();
私人布尔创建连接(){
CS =新ClientSocket的(IP,端口); 尝试{
cs.CreateConnection();
System.out.print(“连接服务器成功!”+“\ n”);
返回true;
}赶上(例外五){
System.out.print(“!无法连接到服务器”+“\ n”);
返回false;
私人无效的sendMessage(){
如果(CS == NULL)
回报;
尝试{
cs.sendMessage(的sendMessage);
}赶上(例外五){
System.out.print(“!发送消息失败”+“\ n”);
私人无效的getMessage(){
如果(CS == NULL)
回报;
数据输入流的InputStream = NULL;
尝试{
的InputStream = cs.getMessageStream();
}赶上(例外五){
System.out.print(“接收消息缓冲区错误\ n”);
返回;
{
/ /本地保存路径}
试试,文件名会自动从服务器继承。
字符串SAVEPATH =“E:\ \”;
整型的bufferSize = 8192;
的byte [] buf中=新的字节[的bufferSize];
整数passedlen = 0; 长LEN = 0;
SAVEPATH + = inputStream.readUTF();
数据输出流fileOut =新的数据输出流(新的缓冲输出流(newBufferedOutputStream(新文件输出流(SAVEPATH)))); LEN = inputStream.readLong();
System.out.println(“文件的长度是:”+ LEN +“\ n”);
系统。通过out.println(“开始接收文件!”+“\ n”);
而(真){
整数读= 0;
如果(inputStream! = NULL){
阅读= inputStream.read(BUF);
passedlen + =读;
如果(读== -1){
突破;
/ /进度条,如果它要播放的文件,你可以重复打印出一些相同的百分比
System.out.println的( “收到的文件”+(passedlen * 100 / LEN)+“%\ N”);
fileOut.write(BUF,0,读);
System.out的。的println(“接收完成,将文件保存为”+ SAVEPATH +“\ n”);
fileOut.close();
}抓(例外五){
System.out.println(“收到错误消息”+“\ n”);
返回;
公共静态无效的主要(字串ARG []){
新ClientTest();
10、java编程实现客户端和服务器端使用socket进行通讯的程序
Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器那么多个客户端如何实现呢?
其实,简单的分析一下,就可以看出客户和服务通讯