"深入理解Java Socket网络编程教程,掌握套接字的概念和使用方法"

需积分: 0 1 下载量 73 浏览量 更新于2024-01-21 收藏 37KB DOCX 举报
Socket网络编程教程是关于使用套接字(socket)进行网络通信的教程。套接字是用于描述IP地址和端口的句柄,它允许应用程序通过发送和接收网络请求来进行通信。 在Java中,使用Java Socket库来进行Socket编程。在J2SDK-1.3版本中,Socket类和ServerSocket类位于java.net包中。ServerSocket用于服务器端,而Socket类用于建立网络连接。当连接成功建立时,应用程序两端都会创建一个Socket实例,通过操作这个实例来完成需要的通信。无论在服务器端还是客户端,套接字是平等的,它们没有任何区别,没有不同的级别。Socket和ServerSocket的工作都是通过SocketImpl类及其子类来完成的。 在Socket编程中,有一些重要的Socket API需要了解。java.net.Socket类继承自java.lang.Object类,具有八个构造器和一些方法。下面介绍三个最常用的方法,其他方法可以参考JDK-1.3文档。 1. accept()方法:用于在服务器端接受客户端的连接请求。当服务器端调用accept()方法时,它会一直阻塞等待,直到有客户端发起连接请求。一旦有连接请求到达,accept()方法会返回一个新的Socket实例,用于表示与客户端的连接,并可以进一步进行通信。 2. getInputStream()方法和getOutputStream()方法:用于在Socket实例上获取输入流和输出流。通过调用getInputStream()方法,可以获取用于接收客户端发送的数据的输入流。通过调用getOutputStream()方法,可以获取用于向客户端发送数据的输出流。这些流可以用于在应用程序和网络之间进行数据的读写操作。 3. close()方法:用于关闭Socket连接。当通信完成或者不再需要连接时,应该调用close()方法来关闭Socket连接,以释放资源。 以上只是Socket编程中的一部分API,还有很多其他方法和技巧可以根据具体需求来使用。在实际应用中,Socket编程非常常见,可以用于开发各种网络应用,如聊天软件、文件传输等。 总结来说,Socket网络编程教程是关于使用套接字进行网络通信的教程。通过了解Socket类和ServerSocket类的API,以及它们的常用方法,可以实现应用程序之间的网络通信。Socket编程在实际应用中非常重要,可以用于开发各种网络应用。
2009-03-01 上传
#include <stdlib.h> #include <stdio.h> #include <winsock2.h> #include <windows.h> int main() { //加载Socket动态链接库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return 1; } /* Confirm that the WinSock DLL supports 2.2.*/ /* Note that if the DLL supports versions greater */ /* than 2.2 in addition to 2.2, it will still return */ /* 2.2 in wVersion since that is the version we */ /* requested. */ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ WSACleanup( ); return 1; } /* The WinSock DLL is acceptable. Proceed. */ //1.创建套接字 SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET == WSAGetLastError()) MessageBox(NULL, "Create Socket failed!", "Error", MB_OK); //2.向服务器发送连接请求 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //3.和服务器进行通信,接收或是发送数据 char recvBuf[100]; recv(sockClient, recvBuf, 100, 0); if(SOCKET_ERROR == WSAGetLastError()) MessageBox(NULL, "Server recieve data failed!", "Error", MB_OK); printf("%s\n", recvBuf); char sendBuf[] = "Hello Server"; send(sockClient, sendBuf, sizeof(sendBuf) + 1, 0); if(SOCKET_ERROR == WSAGetLastError()) MessageBox(NULL, "Server send data failed!", "Error", MB_OK); //4.关闭套接字的资源,以及卸载套接字动态链接库 closesocket(sockClient); WSACleanup(); return 0;