javatcpsocket编程
1. java socket基于TCP/IP协议编程,是这样写的JAVA代码,服务器端:I/O流和server
http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 对照的例子 亲手写一个 好好阅读文档 很容易就学会了
2. 谁有java tcp/ip socket编程 的源代码
先来介绍下网络协议: TCP/IP Transmission Control Protocol 传输控制协议 Internet Protocol 互联网协议 UDP User Datagram Protocol 用户数据协议 连接协议: 分为: 面向连接协议: Connection Oriented Protocol 非连接协议: Connectionless
3. java编程中,Socket通信是怎么实现的
java编程对于Socket之间的通信过程如下:
服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:
publicclassServer{
publicstaticvoidmain(Stringargs[])throwsIOException{
//为了简单起见,所有的异常信息都往外抛
intport=8899;
//定义一个ServerSocket监听在端口8899上
ServerSocketserver=newServerSocket(port);
//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}
}
客户端代码
Java代码publicclassClient{
publicstaticvoidmain(Stringargs[])throwsException{
//为了简单起见,所有的异常都直接往外抛
Stringhost="127.0.0.1";//要连接的服务端IP地址
intport=8899;//要连接的服务端对应的监听端口
//与服务端建立连接
Socketclient=newSocket(host,port);
//建立连接后就可以往服务端写数据了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//写完后要记得flush
writer.close();
client.close();
}
}
4. 用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);
}
}
5. JAVA TCP Socket编程 计算题
服务器端CalculateServer.java:
packageserverMole;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.PrintStream;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassCalculateServer{
publicstaticvoidmain(String[]args){
=newCalculateServer();
try{
calculateServer.startServer();
}catch(Exceptione){
e.printStackTrace();
System.out.println("服务器出错!");
}
}
//把输入的字符串转换成float数组
publicfloat[]convertToArray(StringinputString){
StringnumberString=inputString.substring(inputString.indexOf('[')+1,inputString.indexOf(']'));
String[]stringArray=numberString.split(",");
float[]numberArray=newfloat[2];
for(inti=0;i<2;i++){
try{
numberArray[i]=Float.parseFloat(stringArray[i]);
}catch(NumberFormatExceptione){
System.out.println("数字错误!");
returnnull;
}
}
returnnumberArray;
}
//计算数组结果
publicStringgetResultString(float[]numberArray){
float[]result=newfloat[4];
result[0]=numberArray[0]+numberArray[1];
result[1]=numberArray[0]=numberArray[1];
result[2]=numberArray[0]*numberArray[1];
result[3]=numberArray[0]/numberArray[1];
StringresultString=String.format("[%1$s,%2$s,%3$s,%4$s]",result[0],result[1],result[2],result[3]);
returnresultString;
}
//socketServer
publicvoidstartServer()throwsException{
ServerSocketserverSocket=null;
PrintStreamout=null;
BufferedReaderin=null;
SocketsocketObj=null;
try{
serverSocket=newServerSocket(1888);
System.out.println("服务器启动...");
socketObj=serverSocket.accept();
out=newPrintStream(socketObj.getOutputStream());
in=newBufferedReader(newInputStreamReader(socketObj.getInputStream()));
}catch(IOExceptione){
System.out.println("服务器启动失败!");
}
booleanflag=true;
CalculateServercs=newCalculateServer();
try{
while(flag){
StringinputString=in.readLine();
System.out.println("接收到数据:"+inputString);
if(inputString.equals("bye")){
flag=false;
continue;
}
if(inputString==null||inputString.length()<5){
out.println("你的输入有误!");
}else{
out.println(cs.getResultString(cs.convertToArray(inputString)));
}
}
}catch(Exceptione){
out.println("数据输入有误!");
}finally{
out.close();
in.close();
socketObj.close();
serverSocket.close();
}
}
}
客户端CalculateClient.java
packageclientMole;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.PrintStream;
importjava.net.Socket;
publicclassCalculateClient{
publicstaticvoidmain(String[]args){
=newCalculateClient();
try{
calculateClient.startClient();
}catch(Exceptione){
System.out.println("启动失败!");
}
}
publicvoidstartClient()throwsException{
SocketsocketObj=newSocket("localhost",1888);
PrintStreamout=null;
BufferedReaderin=null;
out=newPrintStream(socketObj.getOutputStream());
in=newBufferedReader(newInputStreamReader(socketObj.getInputStream()));
BufferedReaderlocalInput=null;
localInput=newBufferedReader(newInputStreamReader(System.in));
booleanflag=true;
while(flag){
System.out.println("请输入两个数字,格式为[number1,number2],输入bye则退出:");
StringinputString=localInput.readLine();
out.println(inputString);
if(inputString.equals("bye")){
flag=false;
}else{
Stringinput=in.readLine();
System.out.println("服务器返回结果为:");
System.out.println(input);
}
}
out.close();
in.close();
localInput.close();
socketObj.close();
}
}
6. java tcp协议的 socket编程,服务端为java工程,客户端为web项目,在servlet里进行socket请求,谁做过
用一个线程监听端口,没一个请求都用单独的一个线程处理,以多线程方式执行就可以了。如果是单线程模式,肯定是有阻塞的。
7. JAVA Socket 底层是怎样基于TCP/IP 实现的
首先必须明确:TCP/IP模型中有四层结构: 应用层(Application Layer)、传输层(Transport Layer)、网络层(Internet Layer
)、链路层(LinkLayer)
其中Ip协议(Internet Protocol)是位于网络层的,TCP协议时位于传输层的。通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络。Ip协议只保证计算机能够接收和发送分组数据。当计算机要和远程的计算机建立连接时,TCP协议会让他们建立连接:用于发送和接收数据的虚拟电路。
套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA
有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包,即ServerSocket不能接收实际的数据包。
套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的服务接口,或者说套接字socket是TCP的应用编程接口API,通过它应用层就可以访问TCP提供的服务。
在JAVA中,我们用 ServerSocket、Socket类创建一个套接字连接,从套接字得到的结果是一个InputStream以及OutputStream对象,以便将连接作为一个IO流对象对待。通过IO流可以从流中读取数据或者写数据到流中,读写IO流会有异常IOException产生。
8. 我要一份用java网络编程写的点对点的两人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //从系统标准输入读入一字符串
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
}catch(Exception e) {
System.out.println("Error"+e); //出错,则打印出错信息
}
}
}
9. JAVA Socket编程和C++Socket编程有什么不同
Socket 是winsock里的原始套接字开发接口API,c++/java 他们是开发语言,而 socket 是一种通讯标准简称。首先,2者提供的接口不同(主要是封装形式不同),java 本身不带socket通讯底层实现的,而是通过调用系统底层的winsock API 进行的二次封装,而c/c++ 的socket可以理解为 更接近 系统层面的winsock,所以c/c++ 的socket 可以提供 更多的底层扩展与控制。 其次,从语言上讲,用JAVA发开出来的socket程序 可以在任何支持JAVA虚拟机上运行,不用修改任何代码。而 C/c++ 要根据系统特性进行适当的修改。