Faits :
A.
Par jugement du 19 mars 2019, le Tribunal correctionnel de l'arrondissement de Lausanne a condamné X._, pour lésions corporelles simples, contrainte sexuelle, infraction à la loi fédérale sur les armes, les accessoires d'armes et les munitions (LArm; RS 514.54) et contravention à la LStup, à une peine privative de liberté de 42 mois, ainsi qu'à une amende de 500 francs. Il a en outre révoqué le sursis qui avait été accordé au prénommé le 4 janvier 2016 et ordonné l'exécution de la peine correspondante. Le tribunal a enfin dit que X._ est le débiteur de A._ d'un montant de 4'000 fr., avec intérêts, à titre de réparation du tort moral.
B.
Par jugement du 27 juin 2019, la Cour d'appel pénale du Tribunal cantonal du canton de Vaud a très partiellement admis l'appel formé par X._ contre ce jugement et a réformé celui-ci en ce sens que le sursis accordé le 4 janvier 2016 n'est pas révoqué.
La cour cantonale a retenu les faits suivants s'agissant des infractions encore litigieuses devant le Tribunal fédéral.
B.a. X._ est né en 1973 en France.
Son casier judiciaire suisse fait état d'une condamnation, en 2016, pour lésions corporelles simples et dommages à la propriété.
B.b. A B._, dans l'appartement de X._, en août 2015, alors que A._ était couchée sur le ventre, endormie, celui-ci s'est dévêtu puis a retiré la culotte de la prénommée, avant de se placer au-dessus d'elle. A._ s'est alors éveillée et lui a demandé ce qu'il faisait. Sans lui répondre, X._ lui a asséné plusieurs coups dans le dos et sur les fesses, en lui disant que si elle criait il lui ferait du mal. A._ s'est mise à pleurer. Afin de ne pas être entendu par les voisins, X._ a placé un coussin à l'arrière de la tête de la prénommée, de sorte que le visage de celle-ci s'est trouvé plaqué contre le matelas. Plus A._ pleurait et se débattait, plus X._ la frappait. L'intéressée a finalement cessé de se débattre. X._ a alors tenté, en s'y prenant à plusieurs reprises et en utilisant du lubrifiant, de la pénétrer par voie anale, tout en continuant à la frapper. Par la suite, craignant que X._ puisse devenir plus agressif, A._ a tenté de se calmer. X._ a finalement réussi à la pénétrer partiellement, sans éjaculer en elle.
Après s'être retiré, X._ a relâché A._, laquelle en a profité pour s'enfuir. Il a suivi celle-ci au salon, en lui demandant à plusieurs reprises : "pourquoi tu ne me veux pas?". Après avoir rattrapé A._, il a poussé cette dernière sur le sofa, puis a placé son visage entre ses cuisses, lui a prodigué un cunnilingus et a introduit plusieurs de ses doigts dans son vagin, en lui faisant mal. Effrayée, A._ s'est laissée faire. X._ a ensuite cessé, en disant : "ah, tu ne veux pas, c'est bon". La prénommée a alors saisi ses habits et est partie en courant. Après s'être habillée au premier étage de l'immeuble, elle a quitté les lieux.
B.c. A B._, le 4 avril 2017, lors d'une perquisition effectuée au domicile de X._, un bâton tactique télescopique et un appareil à électrochocs ont été découverts.
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre le jugement du 27 juin 2019, en concluant, avec suite de frais et dépens, principalement à sa réforme en ce sens qu'il est libéré des chefs de prévention de lésions corporelles simples et contrainte sexuelle, qu'il est condamné, pour contraventions à la LArm et à la LStup, à une amende modérée, que sa libération immédiate est ordonnée, que les conclusions civiles de A._ sont rejetées, et qu'une indemnité pour tort moral en raison de sa détention injustifiée - à raison de 400 fr. par jour de détention du 19 mars au 2 avril 2019 puis à raison de 200 fr. par jour du 3 avril 2019 jusqu'à sa libération - lui est accordée. Subsidiairement, il conclut à son annulation et au renvoi de la cause à l'autorité précédente pour nouvelle décision. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.

Considérant en droit :
1.
Le recourant reproche à la cour cantonale d'avoir refusé l'audition de trois témoins.
1.1. Selon l'<ref-law>, la procédure de recours se fonde sur les preuves administrées pendant la procédure préliminaire et la procédure de première instance. L'<ref-law> règle les preuves complémentaires. Ainsi, la juridiction de recours administre, d'office ou à la demande d'une partie, les preuves complémentaires nécessaires au traitement du recours. Le droit d'être entendu, consacré par l'<ref-law>, garantit aux parties le droit de déposer des propositions relatives aux moyens de preuves (al. 1 let. e). Conformément à l'<ref-law>, il n'y a pas lieu d'administrer des preuves sur des faits non pertinents, notoires, connus de l'autorité ou déjà suffisamment prouvés. Cette disposition codifie, pour la procédure pénale, la règle jurisprudentielle déduite de l'art. 29 al. 2 Cst. en matière d'appréciation anticipée des preuves (arrêts 6B_730/2019 du 9 août 2019 consid. 1.1.2; 6B_672/2019 du 6 août 2019 consid. 1.1 et les références citées). Le refus d'instruire ne viole ainsi le droit d'être entendu des parties que si l'appréciation anticipée de la pertinence du moyen de preuve offert, à laquelle le juge a procédé, est entachée d'arbitraire (<ref-ruling> consid. 3.1.3 p. 435; <ref-ruling> consid. 3.3 p. 64; <ref-ruling> consid. 5.3 p. 236).
1.2. L'autorité précédente a exposé que le recourant avait requis l'audition de témoins de moralité, lesquels devaient confirmer que celui-ci était respectueux des femmes. Le recourant avait toutefois reconnu, dans sa déclaration d'appel, que son comportement avait été "extrêmement grossier sans pour autant être pénalement répréhensible", de sorte que la cour cantonale s'estimait suffisamment renseignée à cet égard. L'autorité précédente a en outre précisé que le dossier de la cause permettait de cerner la personnalité de l'intimée, de sorte que l'audition de l'un des témoins qui connaissait aussi celle-ci n'apparaissait pas davantage nécessaire.
1.3. Le recourant regrette que le dossier de la cause ne contienne aucun témoignage permettant de saisir sa personnalité. Contrairement à ce qu'il soutient, la cour cantonale ne s'est pas déclarée renseignée sans aucun fondement sur cet aspect, puisqu'elle disposait des procès-verbaux d'auditions et des écritures du recourant, du témoignage écrit de son ex-épouse, puis a entendu l'intéressé au cours des débats d'appel. Pour le reste, le recourant ne précise aucunement quels renseignements auraient pu être apportés par les témoins en question, dont il ne prétend pas qu'ils auraient par exemple eu connaissance de sa manière de se comporter dans l'intimité. La cour cantonale pouvait donc, sans arbitraire, refuser d'administrer les preuves requises, qui ne pouvaient en aucune manière la renseigner directement sur le déroulement des événements litigieux.
Le grief doit être rejeté.
2.
Le recourant reproche à l'autorité précédente d'avoir apprécié les preuves et établi les faits de manière arbitraire. Il se plaint en outre, à cet égard, d'une violation du principe "in dubio pro reo".
2.1. Le Tribunal fédéral est lié par les faits établis par l'autorité précédente (<ref-law>), à moins qu'ils n'aient été constatés en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, soit pour l'essentiel de façon arbitraire au sens de l'art. 9 Cst. (<ref-ruling> consid. 5.2.2 p. 98). Le Tribunal fédéral n'entre pas en matière sur les critiques de nature appellatoire (<ref-ruling> consid. 1.3 p. 30; <ref-ruling> consid. 2.4 p. 368). L'appréciation des preuves est arbitraire ou manifestement inexacte au sens de l'<ref-law> lorsqu'elle est en contradiction avec le dossier ou contraire au sens de la justice et de l'équité ou lorsque l'autorité ne tient pas compte, sans raison sérieuse, d'un élément propre à modifier la décision, se trompe sur le sens et la portée de celui-ci ou, se fondant sur les éléments recueillis, en tire des constatations insoutenables (cf. <ref-ruling> consid. 3.6.2 p. 287; <ref-ruling> consid. 4.2 p. 233 s.). La présomption d'innocence, garantie par les <ref-law>, 32 al. 1 Cst., 14 par. 2 Pacte ONU II et 6 par. 2 CEDH, ainsi que son corollaire, le principe "in dubio pro reo", concernent tant le fardeau de la preuve que l'appréciation des preuves au sens large (<ref-ruling> consid. 2.2.3.1 p. 348 s.; <ref-ruling> consid. 2a p. 40 s.). En tant que règle sur le fardeau de la preuve, elle signifie, au stade du jugement, que le fardeau de la preuve incombe à l'accusation et que le doute doit profiter au prévenu. Comme règle d'appréciation des preuves (sur la portée et le sens précis de la règle sous cet angle, cf. <ref-ruling> consid. 2.2.3.3 p. 351 s.), la présomption d'innocence signifie que le juge ne doit pas se déclarer convaincu de l'existence d'un fait défavorable à l'accusé si, d'un point de vue objectif, il existe des doutes quant à l'existence de ce fait. Il importe peu qu'il subsiste des doutes seulement abstraits et théoriques, qui sont toujours possibles, une certitude absolue ne pouvant être exigée. Il doit s'agir de doutes sérieux et irréductibles, c'est-à-dire de doutes qui s'imposent à l'esprit en fonction de la situation objective. Lorsque l'appréciation des preuves et la constatation des faits sont critiquées en référence au principe "in dubio pro reo", celui-ci n'a pas de portée plus large que l'interdiction de l'arbitraire (<ref-ruling> consid. 2.2.3.3 p. 351 s.; <ref-ruling> consid. 1.1 p. 503; <ref-ruling> consid. 7 p. 82).
2.2. La cour cantonale a exposé que le recourant avait fourni des explications peu plausibles, voire fantaisistes, concernant le déroulement des événements. Il avait admis avoir passé la soirée avec l'intimée. Selon lui, alors que tous deux étaient nus, celle-ci se serait endormie et il aurait entrepris de se masturber. L'intimée se serait ensuite éveillée et lui aurait demandé ce qu'il faisait, ce à quoi l'intéressé aurait répondu qu'il agissait comme il le souhaitait chez lui. Le recourant aurait ensuite administré une fessée à l'intimée, avant de mettre celle-ci à la porte, nue, en la tenant par le cou. En fait de fessée, le recourant avait déclaré qu'il avait frappé son sexe contre le postérieur de l'intimée, alors qu'elle se trouvait à quatre pattes. Lors d'une audition ultérieure, le recourant n'avait plus évoqué le contact de son sexe avec les fesses de l'intimée, mais avait expliqué qu'auprès le réveil de l'intéressée et ses récriminations concernant son onanisme, il l'aurait saisie par le cou pour la sortir de son appartement. Enfin, au cours des débats de première instance, le recourant avait déclaré qu'il s'était "collé" derrière l'intimée durant deux secondes, sans avoir l'intention de la pénétrer. Selon l'autorité précédente, le recourant avait donc admis que l'intimée avait été confrontée à ses sollicitations sexuelles avant d'être jetée à la porte sans vêtements. Celui-ci n'avait ainsi pas été dénoncé à tort, comme il l'avait soutenu, parce que l'intimée aurait souhaité se venger, mais bien en raison de son comportement.
Pour la cour cantonale, les déclarations de l'intimée avaient varié concernant des points de détail, soit sur l'existence d'un contact téléphonique préalable, d'une rencontre au bas de l'immeuble, sur la tenue vestimentaire du recourant, ou encore à propos de la manière dont l'intéressée avait quitté les lieux. Pour le reste, qu'il y eût ou non pénétration vaginale apparaissait secondaire au regard de la violente tentative de sodomie qui avait été décrite par l'intimée. Les variations dans les déclarations de celle-ci étaient donc compréhensibles. Le fait que l'intimée ne se fût pas rendue immédiatement chez un médecin après les faits n'était pas exceptionnel, puisque de nombreuses victimes réagissaient de cette manière, en tentant tout d'abord d'oublier l'événement. Cela expliquait que l'intimée eût déposé plainte près de deux ans après les faits et n'eût pas pris des photographies des ecchymoses qu'elle avait indiqué avoir présentées au bas du dos et sur les fesses durant plusieurs jours.
L'autorité précédente a encore indiqué que la témoin C._ n'avait certes pas mis en cause le recourant concernant des agissements similaires, contrairement à ce qu'avait déclaré l'intimée au cours d'une audition. C._ avait cependant confirmé que l'intimée s'était confiée à elle, lui avait indiqué avoir subi "quelque chose de grave", avoir été touchée sexuellement par le recourant puis avoir quitté son logement à demi nue après la dispute. Par ailleurs, le recourant avait admis que l'une de ses collègues de travail l'avait accusé de l'avoir harcelée. Les déclarations du compagnon de l'intimée avaient quant à elles été prises en compte essentiellement s'agissant des constats faits par celui-ci durant leurs rapports intimes, selon lesquels l'intéressée "se crispait". Ce témoin avait en outre expliqué pourquoi, après une rencontre inopinée entre le recourant et l'intimée, cette dernière avait déposé plainte pénale. L'autorité précédente a donc, sur la base de ces éléments, prêté foi à la version des événements présentée par l'intimée.
2.3. Le recourant présente une argumentation purement appellatoire et, partant, irrecevable, par laquelle il oppose sa propre version des événements à celle de la cour cantonale, sans démontrer en quoi celle-ci serait arbitraire. Contrairement à ce qu'il suggère, l'autorité précédente n'a pas établi les faits en raison de l'invraisemblance de son récit, mais car elle a considéré que la version des événements présentée par l'intimée était plus crédible. Il importe peu que sa présentation des événements litigieux n'apparaisse pas impossible, dès lors que l'intéressé ne démontre pas en quoi l'état de fait de la cour cantonale serait insoutenable. L'argumentation du recourant, selon laquelle l'autorité précédente aurait dû considérer son scénario "alternatif", tombe à faux. En effet, celui-ci perd de vue qu'une décision n'est pas arbitraire du seul fait qu'une autre solution paraisse concevable, voire préférable; il faut qu'elle soit manifestement insoutenable dans sa motivation et dans son résultat (cf. <ref-ruling> consid. 2 p. 146; <ref-ruling> consid. 2.3.1 p. 244).
Pour le reste, le recourant rediscute intégralement les déclarations faites par les parties en cours d'instruction ainsi que les témoignages figurant au dossier de la cause, en substituant sa propre appréciation des preuves à celle de l'autorité précédente. Il ne montre toutefois nullement quel élément aurait, de manière insoutenable, été tiré de l'un ou l'autre de ces moyens probatoires par la cour cantonale, ni en quoi l'état de fait apparaîtrait arbitraire au regard des déclarations en question. Le recourant s'attache d'ailleurs essentiellement à revenir sur des éléments périphériques aux événements litigieux - ainsi la manière dont l'intimée est rentrée dans son immeuble, sa tenue au moment des faits, son comportement ultérieur, ou encore la pièce dans laquelle se trouvaient les intéressés - sans que l'on perçoive lequel de ces aspects permettrait de considérer que l'autorité précédente aurait arbitrairement refusé de croire ses dénégations concernant l'agression sexuelle.
Le grief doit ainsi être rejeté dans la mesure où il est recevable.
3.
Le recourant fait grief à la cour cantonale de l'avoir condamné pour infraction à l'art. 33 al. 1 let. a LArm. Il soutient qu'il aurait dû être condamné pour infraction par négligence au sens de l'art. 33 al. 2 LArm.
3.1. Selon l'art. 33 al. 1 let. a LArm, est puni d'une peine privative de liberté de trois ans au plus ou d'une peine pécuniaire quiconque, intentionnellement, sans droit, offre, aliène, acquiert, possède, fabrique, modifie, transforme, porte, exporte vers un Etat Schengen ou introduit sur le territoire suisse des armes, des éléments essentiels d'armes, des composants d'armes spécialement conçus, des accessoires d'armes, des munitions ou des éléments de munitions, ou en fait le courtage. Aux termes de l'art. 33 al. 2 LArm, si l'auteur agit par négligence, la peine est une amende. Dans les cas de peu de gravité, le juge peut exempter l'auteur de toute peine.
Déterminer ce qu'une personne a su, voulu, envisagé ou accepté relève du contenu de la pensée, à savoir de faits "internes" qui, en tant que tels, lient le Tribunal fédéral (cf. <ref-law>), à moins qu'ils n'aient été retenus de manière arbitraire (cf. <ref-ruling> consid. 6.3 p. 375).
3.2. La cour cantonale a retenu que le recourant n'avait eu aucune raison de se croire en droit de posséder du matériel prohibé. Celui-ci n'avait avancé aucune explication à cet égard mais s'était contenté de protester de son ignorance en la matière, de sorte qu'il convenait de considérer qu'il avait agi intentionnellement.
Le recourant ne démontre pas en quoi il aurait été arbitraire, pour l'autorité précédente, de retenir qu'il avait eu connaissance de l'illicéité de son comportement, mais se borne à affirmer, de manière purement appellatoire, qu'il ignorait que la possession des objets en question fût prohibée. Au demeurant, durant sa première audition par la police, l'intéressé n'a aucunement prétendu avoir ignoré que son comportement fût illicite (cf. PV du 4 avril 2017, p. 4), non plus que devant le tribunal de première instance, auprès duquel il a admis que l'infraction avait été réalisée intentionnellement (cf. jugement du 19 mars 2019, p. 16).
Le grief doit donc être rejeté dans la mesure où il est recevable.
4.
Le recourant conclut à l'allocation d'une indemnité en raison de la détention subie jusqu'à ce jour. Dès lors qu'il n'obtient pas l'acquittement auquel il prétendait, son grief est sans objet.
5.
Le recours doit être rejeté dans la mesure où il est recevable. Comme ses conclusions étaient dépourvues de chances de succès, l'assistance judiciaire ne peut être accordée (<ref-law>). Par conséquent, le recourant, qui succombe, supportera les frais judiciaires (<ref-law>), dont le montant sera fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable. L'intimée, qui n'a pas été invitée à se déterminer, ne saurait prétendre à des dépens.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 19 septembre 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa