tcp代码java tcp代码 只能在局域网

JAVA Tcp 通讯代码问题

localhost是指你本机,它可以改成127.0.0.1,如果跟其他机器通讯就改成另一台机器的ip地址。8800是指通讯端口;

目前成都创新互联公司已为上1000家的企业提供了网站建设、域名、网页空间、网站托管运营、企业网站设计、海拉尔网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

你把OS里的O理解为output,IS里的I理解为input。OS是输出端,输出端把数据放到BufferedReader,BufferedReader通过端口传输到IS后,再读取。

java如何通过tcp发送指令

以下是一个展示java使用tcp通讯的简单例子,包括服务器和客户端代码:

/**

*TCPServer

*/

import java.io.*;

import java.net.*;

class TCPServer{

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

ServerSocket listen = new ServerSocket(5050);

Socket server = listen.accept();

InputStream in = server.getInputStream();

OutputStream out = server.getOutputStream();

char c = (char)in.read();

System.out.println("收到:" + c);

out.write('s');

out.close();

in.close();

server.close();

listen.close();

}

}

/**

*TCPClient

*/

import java.io.*;

import java.net.*;

class TCPClient{

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

Socket client = new Socket("127.0.0.1" , 5050);

InputStream in = client.getInputStream();

OutputStream out = client.getOutputStream();

out.write('c');

char c = (char)in.read();

System.out.println("收到:" + c);

out.close();

in.close();

client.close();

}

}

TCP/IP协议 怎么用JAVA发送和接收二进制数据 要具体实例

1.TCP/IP协议要求信息必须在块(chunk)中发送和接收,而块的长度必须是8位的倍数,因此,我们可以认为TCP/IP协议中传输的信息是字节序列。如何发送和解析信息需要一定的应用程序协议。

2.信息编码:

首先是Java里对基本整型的处理,发送时,要注意:1)每种数据类型的字节个数;2)这些字节的发送顺序是怎样的?(little-endian还是

big-endian);3)所传输的数值是有符号的(signed)还是无符号的(unsigned)。具体编码时采用位操作(移位和屏蔽)就可以了。

具体在Java里,可以采用DataOutputStream类和ByteArrayOutputStream来实现。恢复时可以采用

DataInputStream类和ByteArrayInputStream类。

其次,字符串和文本,在一组符号与一组整数之间的映射称为编码字符集(coded character

set)。发送者与接收者必须在符号与整数的映射方式上达成共识,才能使用文本信息进行通信,最简单的方法就是定义一个标准字符集。具体编码时采用

String的getBytes()方法。

最后,位操作。如果设置一个特定的设为1,先设置好掩码(mask),之后用或操作;要清空特定一位,用与操作。

3.成帧与解析

成帧(framing)技术解决了接收端如何定位消息的首位位置的问题。

如果接收者试图从套接字中读取比消息本身更多的字节,将可能发生以下两种情况之一:如果信道中没有其他消息,接收者将阻塞等待,同时无法处理接收

到的消息;如果发送者也在等待接收端的响应消息,则会形成死锁(dealock);另一方面,如果信道中还有其他消息,则接收者会将后面消息的一部分甚至

全部读到第一条消息中去,这将产生一些协议错误。因此,在使用TCP套接字时,成帧就是一个非常重要的考虑因素。

有两个技术:

1.基于定界符(Delimiter-based):消息的结束由一个唯一的标记(unique

marker)指出,即发送者在传输完数据后显式添加的一个特殊字节序列。这个特殊标记不能在传输的数据中出现。幸运的是,填充(stuffing)技术

能够对消息中出现的定界符进行修改,从而使接收者不将其识别为定界符。在接收者扫描定界符时,还能识别出修改过的数据,并在输出消息中对其进行还原,从而

使其与原始消息一致。

2.显式长度(Explicit length):在变长字段或消息前附加一个固定大小的字段,用来指示该字段或消息中包含了多少字节。这种方法要确定消息长度的上限,以确定保存这个长度需要的字节数。

接口:

Java代码 import java.io.IOException; import java.io.OutputStream; public interface Framer { void frameMsg(byte [] message,OutputStream out) throws IOException; byte [] nextMsg() throws IOException; }

定界符的方式:

Java代码 import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class DelimFramer implements Framer { private InputStream in;//data source; private static final byte DELIMTER=(byte)'\n';//message delimiter public DelimFramer(InputStream in){ this.in=in; } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { //ensure that the message dose not contain the delimiter for(byte b:message){ if(b==DELIMTER) throw new IOException("Message contains delimiter"); } out.write(message); out.write(DELIMTER); out.flush(); } @Override public byte[] nextMsg() throws IOException { ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream(); int nextByte; while((nextByte=in.read())!=DELIMTER){ if(nextByte==-1){//end of stream? if(messageBuffer.size()==0){ return null; }else{ throw new EOFException("Non-empty message without delimiter"); } } messageBuffer.write(nextByte); } return messageBuffer.toByteArray(); } }

显式长度方法:

Java代码 import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class LengthFramer implements Framer { public static final int MAXMESSAGELENGTH=65535; public static final int BYTEMASK=0xff; public static final int SHOTMASK=0xffff; public static final int BYTESHIFT=8; private DataInputStream in;// wrapper for data I/O public LengthFramer(InputStream in) throws IOException{ this.in=new DataInputStream(in); } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { if(message.lengthMAXMESSAGELENGTH){ throw new IOException("message too long"); } //write length prefix out.write((message.lengthBYTEMASK)BYTEMASK); out.write(message.lengthBYTEMASK); //write message out.write(message); out.flush(); } @Override public byte[] nextMsg() throws IOException { int length; try{ length=in.readUnsignedShort(); }catch(EOFException e){ //no (or 1 byte) message; return null; } //0=length=65535; byte [] msg=new byte[length]; in.readFully(msg);//if exception,it's a framing error; return msg; } }

java如何通过tcp向指定的IP发送指令并获得返回的包?

以下是一个展示java使用tcp通讯的简单例子,包括服务器和客户端代码:

/**

*TCPServer

*/

import java.io.*;

import java.net.*;

class TCPServer{

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

ServerSocket listen = new ServerSocket(5050);

Socket server = listen.accept();

InputStream in = server.getInputStream();

OutputStream out = server.getOutputStream();

char c = (char)in.read();

System.out.println("收到:" + c);

out.write('s');

out.close();

in.close();

server.close();

listen.close();

}

}

/**

*TCPClient

*/

import java.io.*;

import java.net.*;

class TCPClient{

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

Socket client = new Socket("127.0.0.1" , 5050);

InputStream in = client.getInputStream();

OutputStream out = client.getOutputStream();

out.write('c');

char c = (char)in.read();

System.out.println("收到:" + c);

out.close();

in.close();

client.close();

}

}

用java编写一个能进行简单TCP/IP通信的C/S程序

import java.net.ServerSocket;

import java.net.Socket;

public class TcpServer

{

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

{

// 创建服务器端的socket对象

ServerSocket ss = new ServerSocket(5000);

// 监听连接

Socket socket = ss.accept();

// 直到连接建立好之后代码才会往下执行

System.out.println("Connected Successfully!");

}

}

import java.net.Socket;

public class TcpClient

{

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

{

Socket socket = new Socket("127.0.0.1", 5000);

}

}

java写tcp客户端测试类该怎么写

1.TCP服务端的程序编写

package test;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public class MyTcp{

private BufferedReader reader;

private ServerSocket serverSocket;

private Socket socket;

/**

* 创建服务端的程序,读取客户端传来的数据

*/

void getserver(){

try {

serverSocket = new ServerSocket(8998); //实例化服务端socket

System.out.println("服务器套接字已经创建成功");

while (true) {

System.out.println("等待客户机的连接:");

socket = serverSocket.accept(); //实例化socket对象

reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //实例化BufferReader对象

getClientMessage();

}

} catch (Exception e) {

e.printStackTrace();

}

}

private void getClientMessage() {

try {

while (true) {

System.out.println("客户机传来的信息是:"+reader.readLine());

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

MyTcp myTcp = new MyTcp(); //创建本类对象

myTcp.getserver();

}

}

2.TCP客户端程序编写

package test;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.PrintWriter;

import java.net.Socket;

import java.nio.channels.WritableByteChannel;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.border.BevelBorder;

public class MyTcpClient extends JFrame{

private PrintWriter printWriter;

Socket socket;

private JTextField jTextField = new JTextField();

private JTextArea jTextArea = new JTextArea();

Container container;

/**

* 创建的Tcp客户端程序

*/

public MyTcpClient (String title) {

super(title);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

container = this.getContentPane();

final JScrollPane jScrollPane = new JScrollPane();

jScrollPane.setBorder(new BevelBorder(BevelBorder.RAISED)); //显示边框

getContentPane().add(jScrollPane,BorderLayout.CENTER);

jScrollPane.setViewportView(jTextArea);

container.add(jTextField,"South"); //将文本框放在窗体下面

jTextField.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

printWriter.println(jTextField.getText()); //将文本框的信息写入流(为下面的输出流写入信息做准备)

jTextArea.append(jTextField.getText() + "\n");

jTextArea.setSelectionEnd(jTextArea.getText().length());

jTextField.setText(null);

}

});

}

private void connect() {

jTextArea.append("尝试连接中...\n");

try {

socket = new Socket("127.0.0.1",8998);

printWriter = new PrintWriter(socket.getOutputStream(),true); //将printwriter中的信息流写入到套接字的输出流传送给服务端

jTextArea.setText("已完成连接\n\n");

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

MyTcpClient myTcpClient = new MyTcpClient("向服务器发送数据");

myTcpClient.setSize(500,200);

myTcpClient.setVisible(true);

myTcpClient.connect();

}

}

3.效果展示

1先将服务端的程序跑起来

2再将客户端的程序跑起来

3.客户端和服务端进行交互


本文标题:tcp代码java tcp代码 只能在局域网
地址分享:http://scyanting.com/article/dododei.html